leetcode 每日一题 111. Minimum Depth of Binary Tree

今日组会····水一道~

题目和求最大深度一样,只不过这个是求最小的深度 

感觉理解的还是不够透彻 所以写出简洁的代码不容易

=========================================

所谓最小深度,是指从root到任意一个leaf的最短深度。


如果root为空,深度为0。
如果root不为空:
如果左右子树都不为空,最小深度就是 1 + min(minDepth(left), minDepth(right))。
如果左子树为空,最小深度就是 1 + minDepth(right)。
如果右子树为空,最小深度就是 1 + minDepth(left)。

以上解法摘自    floodliu(简书作者)
原文链接:http://www.jianshu.com/p/6293835f8f14

=========================================

所以我们可以考虑,当全是左子树或者右子树的情况时,其实最小和最大深度是一样的


因此可以写出代码如下:


class Solution {
public:
    
    int minDepth(TreeNode* root) {
        if(root==NULL) return 0;
        
        int l=minDepth(root->left);
        int r=minDepth(root->right);
        
        if(l==0&&r==0)
            return 1;
        else if(l==0&&r!=0)
            return r+1;
        else if(r==0&&l!=0)
            return l+1;
        else
            return min(l,r)+1;
    }

};

discuss中有更加简洁美好的代码:

https://leetcode.com/discuss/92802/an-easy-and-short-answer-of-cpp

class Solution {
    public:
    int minDepth(TreeNode* root) {
        if (root ==NULL)
            return 0;
        int l = minDepth(root->left) ;
        int r = minDepth(root->right) ;
        if (l==0 || r==0)
            return l+r+1 ;
        return (l>r?r:l)+1 ;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值