leetcode 111. 二叉树的最小深度

题目链接:111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最小深度 2.

程序说明:

注意和104. 二叉树的最大深度的不同,不能只把最大深度中的max改为min,因为如果某结点只有一个子树,那么它不是叶子结点,但是会被记录最小深度。

代码如下:

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null)
            return 0;
        //左子树为空时,只考虑右子树
        if(root.left == null)
            return minDepth(root.right) + 1;
        //右子树为空时,只考虑左子树
        if(root.right == null)
            return minDepth(root.left) + 1;
		//左右子树都不空
        return Math.min(minDepth(root.left), minDepth(root.right)) + 1; 
    }
}

另解:在最大深度的基础上,将max改为min的同时,判断是否为叶子结点。

class Solution {
    public int minDepth(TreeNode root) {
        if (root == null)
            return 0;            
        int left = minDepth(root.left);
        int right = minDepth(root.right);
        if (left == 0 || right == 0)
            return left + right + 1;
 
        return Math.min(left, right) + 1;
    }
}

你可能感兴趣的:(LeetCode)