LeetCode二叉树经典题目(六):深度问题

目录

12. LeetCode104. 二叉树的最大深度

13. LeetCode111. 二叉树的最小深度


12. LeetCode104. 二叉树的最大深度

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root==NULL){
            return 0;
        }
        int depth=max(maxDepth(root->left),maxDepth(root->right))+1;
        return depth;
    }
};

13. LeetCode111. 二叉树的最小深度

注意:只有当遍历到叶子节点时,即左右子节点都为空,才能认为最小深度是1
要明白每个节点可能遇到的情况,从而分析得出相应的策略。
class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root==NULL)return 0;
        int leftDepth=minDepth(root->left);
        int rightDepth=minDepth(root->right);
       
        return root->left==NULL||root->right==NULL?
        leftDepth+rightDepth+1:min(leftDepth,rightDepth)+1;
    }
};

class Solution {
    class Info{
    public:
        int minDepth;
        Info(int minDepth){
            this->minDepth=minDepth;
        }
    };

public:
    int minDepth(TreeNode* root) {
        Info data=process(root);
        return data.minDepth;
    }

    Info process(TreeNode*node){
        if(node==NULL)return Info(0);
        if(node->left==NULL&&node->right==NULL)return Info(1);
        Info leftData=process(node->left);//向左子树要信息
        Info rightData=process(node->right);//向右子树要信息
        /*
        处理当前信息,分析当前节点左右子树情况
        1.左右子节点都为空,说明是叶子节点,0+0+1=1
        2.左右子节点有一个为空,那就是不为空的子树高度+1,其中空的深度是0,不影响
        3.都不为空,左右最小高度+1
        */
        if(node->left==NULL||node->right==NULL)
            return Info(leftData.minDepth+rightData.minDepth+1);
        
        return Info(min(leftData.minDepth,rightData.minDepth)+1);
    }
};

以上是求二叉树深度的递归代码,如果想要迭代求二叉树深度,那只要利用另一个容器(队列/栈)层序遍历二叉树。

对于最大深度:只要容器里还有节点,就继续迭代。

对于最小深度:只要容器里有某个节点无左右子节点,就停止迭代。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jomo.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值