给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回它的最小深度 2.
思路:
1.和求最大深度一样 dfs递归
int res = Integer.MAX_VALUE;
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
helper(root, 1);
return res;
}
private void helper(TreeNode root, int depth) {//传入的第二个参数是当前节点的深度
if (root == null) {
return;
}
//为叶子节点
if (root.left==null&&root.right==null&&depth < res) {
res = depth;
}
helper(root.left, depth + 1);
helper(root.right, depth + 1);
}
2.更简洁一点
public int minDepth2(TreeNode root) {
if (root == null) {
return 0;
}
return helper(root);
}
private int helper(TreeNode root) {
if (root == null) {
return Integer.MAX_VALUE;
} else if (root.left == null && root.right == null) {
return 1;
} else {
return Math.min(helper(root.left), helper(root.right)) + 1;
}
}