算法day40 二叉树的最大深度

题目描述

解法1:递归
我们可以采用递归的方式求解这道题,由于要求解最大深度,我们的策略应该是让由根节点出发的后序遍历(这样的话可以避免对于根节点的二次访问),随后当递归到结尾时返回每一小层次的左右侧深度的比较,通过不断地叠加最后得到最大深度。具体的代码如下。

   int maxDepth(TreeNode* root) {
    if(root == nullptr) return 0;
    int left_depth = maxDepth(root->left);
    int right_depth = maxDepth(root->right);

    return max(left_depth,right_depth)+1;
}

时间复杂度:O(n)
空间复杂度:O(h)

解法2:层序遍历
本题除了采用递归之外我们还可以采用层序遍历的方式,既然要求解最大深度,那么也即是要求最大的层数,那么我们可以借助队列,让每一层的节点全部入队,每当有节点出队时检查其是否有孩子,有孩子使其孩子入队,统计出每一层的节点个数,循环节点个数次,每一个这样的循环结束,便存在一层深度,累加后得到最大深度。代码如下。

public:
int maxDepth(TreeNode* root) {
    int depth = 0;
    if(!root) return depth;
    queue<TreeNode*> que;
    que.push(root);
    //depth++;
    while(!que.empty()){
        int size = que.size();
        while(size--){
            TreeNode *Node = que.front();
            que.pop();
            if(Node->left){
                que.push(Node->left);
            }
            if(Node->right){
                que.push(Node->right);
            }
            if(Node->left || Node->right){

            }
        }
        depth++;
   } 
    return depth;
}

时间复杂度:O(n)
空间复杂度:O(n)

END

posted on 2025-06-16 14:22  sakura430  阅读(14)  评论(0)    收藏  举报