树的层先遍历以及求深度

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;
    }

image.png

2.2或者使用 BFS