Leetcode 111. Minimum Depth of Binary Tree
题目:
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
Note: A leaf is a node with no children.
Example 1:
Input: root = [3,9,20,null,null,15,7] Output: 2
解题思路:
主要算法递归。
递归函数:Min(左子树最小深度,右子树最小深度)+1 (这里+1指的是根节点)
递归终止条件:到叶子节点,即node.right==null && node.left==null
遇到问题:比如在只有单棵子树情况下,左子树深度=0,右子树深度=1,单纯取Min值,算出结果=1,报错。
1
\
2
解决方法,当只有单棵子树情况下,只要返回另一边深度+1,即当左子树为空时,只考虑右子树的深度。
代码:
/**
* 求最小深度
* 递归算法:Min(左子树最小深度,右子树最小深度)+1
* 递归结束条件,到了叶子节点
* 如果左子树的深度为0,不能取min(0,右子树)+1 =1
* 只有右子树的情况下,直接取右子树的最小值+1
* return RightNum+1;
* @param root
* @return
*/
public static int minDepth(TreeNode root) {
if (root==null){
return 0;
}
if (root.left==null&&root.right==null){
return 1;
}
int LeftNum = minDepth(root.left);
int RightNum = minDepth(root.right);
if (LeftNum == 0){
return RightNum+1;
}
if (RightNum==0){
return LeftNum+1;
}
return Math.min(LeftNum,RightNum)+1;
}