树的层先遍历以及求深度
1.使用迭代(BFS广度优先)
层先遍历:将每一层放入队列,取出时判断是否有需要添加到队列尾部的元素,依次循环每一层。
int tree_depth(BTreeNode* root) { //求深度算法
queue<BTreeNode*> que;
int depth = 0;
que.push(root);
while (que.empty() != 1)
{
int size = que.size();
depth++;
for (int i = 0; i < size; i++)
{
BTreeNode* cur = que.front();
que.pop();
if (cur->left_child != NULL) que.push(cur->left_child);
if (cur->right_child != NULL) que.push(cur->right_child);
}
}
return depth;
}
2.使用递归求解深度
2.1前序求深度,后序求高度
深度从上往下求,高度从下往上求。
而最大深度就是高度,因此求最大深度可用后序遍历;
int getdepth(treenode* node) {
if (node == null) return 0;
int leftdepth = getdepth(node->left); // 左
int rightdepth = getdepth(node->right); // 右
int depth = 1 + max(leftdepth, rightdepth); // 中
return depth;
}