求二叉树从根节点到最近的叶子节点的深度。
注意:求的是到叶子的最短距离,不能直接用最小子节点深度+1来计算。如对于[1,2],root的右子树深度为0,但右子树不是叶子节点。
方法一:
public int minDepth(TreeNode root) {
if(root == null) return 0;
int left = minDepth(root.left);
int right = minDepth(root.right);
return (left == 0 || right == 0) ? left + right + 1: Math.min(left,right) + 1; //若左子节点为空,则应该返回右节点深度+1,反之亦然。若两个左右皆空,则返回1,若都不为空,则返回最小深度+1
}
方法二:
public int minDepth(TreeNode root) {
if(root == null) return 0;
if(root.left == null) return 1 + minDepth(root.right); //若左为空,返回右深度+1
if(root.right == null) return 1 + minDepth(root.left); //若右为空,返回左深度+1
return 1 + Math.min(minDepth(root.left),minDepth(root.right)); //均不为空,返回最小值+1
}
方法三:
public int minDepth(TreeNode root) {
if (root == null) return 0;
int L = minDepth(root.left), R = minDepth(root.right);
return 1 + (Math.min(L, R) > 0 ? Math.min(L, R) : Math.max(L, R)); //类似于方法一
}