二叉树的最小深度
此题和最大深度不同,根据题目描述,二叉树的最小深度为叶节点的最短路径上的节点数量,在1,2这个测试用例中
最大深度为2,最大深度不为1,因此有下列三种情况:
●当左右子树均为空时,则返回1。
●当左右子树为有一个为空时,返回不为空子树的最小深度。
●当左右子树均不为空时,返回左右子树中的最小深度。
代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
if(root==null) return 0;
//如果左右子树均为空,则返回1
if(root.left==null&&root.right==null) return 1;
//如果左右子树只有一个为空,则先获取左右子树最小深度
int ml=minDepth(root.left);
int mr=minDepth(root.right);
//左右子树只有一个为空,则返回不为空子树的最小深度,由于另一子树为空,深度为0,因此只需返回ml+md+1
if(root.left==null||root.right==null) return ml+mr+1;
//左右子树均不为空,则返回左右子树的最小深度+1
return Math.min(ml,mr)+1;
}
}
对代码进行优化
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
if(root==null) return 0;
//左子树最小深度
int ml=minDepth(root.left);
//右子树最小深度
int mr=minDepth(root.right);
//ml+mr+1在左右子树有为空时成立
return root.left==null||root.right==null?ml+mr+1:Math.min(ml,mr)+1;
}
}