给定一个二叉树,找出其最小深度。
二叉树的最小深度为根节点到最近叶子节点的距离。
样例
给出一棵如下的二叉树:
1
/ \
2 3
/ \
4 5
这个二叉树的最小深度为 2
解题思路:
这道题与Lintcode 97:Maximum Depth of Binary Tree还不太一样,有一个陷阱:当节点的有一个孩子为空一个孩子不为空时,不能断定说这个节点的最小深度为0,因为此时这个节点不是一个叶子节点,深度信息应该与不为空的孩子节点有关。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree
* @return: An integer
*/
public int minDepth(TreeNode root) {
// write your code here
if(root == null)
return 0;
int leftDepth = minDepth(root.left);
int rightDepth = minDepth(root.right);
//如果左右子树有一个为空,则不能返回为0的结果,必须返回不为空的结果
if(root.left == null || root.right == null)
return Math.max(leftDepth, rightDepth) + 1;
return Math.min(leftDepth, rightDepth) + 1;
}
}
二刷:
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: The root of binary tree
* @return: An integer
*/
public int minDepth(TreeNode root) {
// write your code here
if(root == null)
return 0;
int left = minDepth(root.left);
int right = minDepth(root.right);
if(left == 0 && right == 0)
return 1;
else if(left == 0 || right == 0)
return Math.max(left, right)+1;
else
return Math.min(left, right)+1;
}
}