今日组会····水一道~
题目和求最大深度一样,只不过这个是求最小的深度
感觉理解的还是不够透彻 所以写出简洁的代码不容易
=========================================
所谓最小深度,是指从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 ;
}
};