题解 | #二叉树的最大深度#

二叉树的最大深度

http://www.nowcoder.com/practice/8a2b2bf6c19b4f23a9bdb9b233eefa73

题解一: 深度优先
题解思路: 使用深度优先遍历所有根到叶节点的深度,树的深度等于左子树的深度与右子树深度的最大值+1.
图示:
图片说明
递归分析:
递归边界: 当root的为空,返回0
递归过程: 计算root左子树深度和root右子树深度

复杂度分析:
时间复杂度:O(N): 每个节点需要遍历一次
空间复杂度:
O(N)
: 最坏情况树退化为链表
实现如下:

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(!root) return 0;  //递归边界
         return max(maxDepth(root->left),maxDepth(root->right))+1;  //计算左子树和右子树深度取大者最后+1 = 树的深度
    }
};

题解二: 层次遍历
题解思路:使用层次遍历直接求二叉树的深度
分析:
1.自定义结构体node_deep表示每个节点所在的深度,其属性为TreeNode* node, int depth;
2.使用队列用于保存每层的节点
3.如果队列为空,就返回ans。
图示:
图片说明

复杂度分析:
时间复杂度:O(N) :每个节点需要遍历一次
空间复杂度:O(N) : 最坏情况树为完全平衡树,队列同时存储着N/2个节点。
实现如下:

class Solution {
public:
    /**
     *
     * @param root TreeNode类
     * @return int整型
     */
    struct node_deep{
        TreeNode* node;  //节点
        int depth;   //该节点所在的层
        node_deep(TreeNode* t = NULL,int d = 0):node(t),depth(d){};
    };

    int maxDepth(TreeNode* root) {
        // write code here
        if(!root) return 0;  //root为NULL,返回0
        int ans = 0;  //树的深度
        queue<node_deep*> q;
        node_deep* head = new node_deep(root,1);
        q.push(head);  //将根节点入队
        while(!q.empty()){
            node_deep * tmp = q.front(); q.pop();
            ans = tmp->depth;  //ans = 当前所在层深度
           //下一层的节点入队且depth+1
            if(tmp->node->left) {
                node_deep * left_node = new node_deep(tmp->node->left,tmp->depth+1); 
                q.push(left_node);
            }
            if(tmp->node->right){
                node_deep * right_node = new node_deep(tmp->node->right,tmp->depth+1);
                q.push(right_node);
            }
        }
        return ans;
    }
};

相关题目:
二叉树层序遍历

牛客网编程题题解 文章被收录于专栏

本专栏记录在牛客网上AC的每一题,写下题解。 未来2年完成2000编程题的题解。 2021.12.29更新,最进准备毕设,断更了,会尽快做完毕设,继续做这一件事情

全部评论

相关推荐

评论
8
1
分享
正在热议
# 25届秋招总结 #
443173次浏览 4517人参与
# 春招别灰心,我们一人来一句鼓励 #
42122次浏览 537人参与
# 阿里云管培生offer #
120403次浏览 2220人参与
# 地方国企笔面经互助 #
7973次浏览 18人参与
# 同bg的你秋招战况如何? #
77083次浏览 569人参与
# 实习必须要去大厂吗? #
55804次浏览 961人参与
# 北方华创开奖 #
107467次浏览 600人参与
# 虾皮求职进展汇总 #
116163次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11668次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454912次浏览 34860人参与
# 提前批简历挂麻了怎么办 #
149924次浏览 1978人参与
# 在找工作求抱抱 #
906075次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4762次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196021次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157643次浏览 2267人参与
# 双非本科求职如何逆袭 #
662359次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12798次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35896次浏览 384人参与
# 简历中的项目经历要怎么写? #
86935次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20148次浏览 240人参与
# 我的上岸简历长这样 #
452049次浏览 8089人参与
牛客网
牛客企业服务