题目链接:https://leetcode.com/problems/minimum-depth-of-binary-tree/#/description
思路:二叉树的最小深度 = min {左子树的最小深度,右子树的做小深度 } + 1 ;使用递归求解。
需要注意的是,求二叉树的最小深度比求二叉树的最大深度稍微复杂一点,有一种情况需要考虑:当根节点只有左子树或者只有右子树时...假设某二叉树只有左子树,右子树为null,我们不能将右子树的深度设置为0,因为这样右子树的深度0将会在min{左子树最小深度, 右子树最小深度}中被选择出来,这样得到的结果是整个二叉树的最小深度为0,但是这个结果是不正确的。这种情况下正确结果是:二叉树的最小深度=左子树的最小深度+1。
Java代码如下:
public class Solution {
public int minDepth(TreeNode root) {
if(root == null){
return 0;
}
int leftMinDepth = minDepth(root.left);
int rightMinDepth = minDepth(root.right);
// 当有一个分支子树为空时
if(leftMinDepth==0){
return rightMinDepth + 1;
} else if(rightMinDepth==0){
return leftMinDepth + 1;
}
return Math.min(leftMinDepth, rightMinDepth) + 1;
}
}