[LeetCode] 111. 二叉树的最小深度

题目链接 : https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/

题目描述:

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

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

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

示例:

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

    3
   / 
  9  20
    /  
   15   7
返回它的最小深度  2.

思路:

思路很简单, 就是左右子树高度,选最小那个

刚开始我是这样做的

def minDepth(self, root: TreeNode) -> int:
        if not root: return 0
        return min(self.minDepth(root.left), self.minDepth(root.right)) + 1

但是有个错误例子

   1
  /
 2

我们的算法求出是1,正确答案是2,也就是根节点不能是叶子节点!

所以,要想办法解决这个问题,我采用是提前判断是否是叶子节点!

class Solution:
    def minDepth(self, root: TreeNode) -> int:  
        if not root: return 0
        def helper(root):
            if not root: return float("inf")
            if not root.left and not root.right: return 1
            return min(helper(root.left), helper(root.right)) + 1
        return helper(root)

大家可以借鉴一下,网上有更简洁的版本.

def minDepth(self, root: TreeNode) -> int:  
        if not root: return 0
        left = self.minDepth(root.left) 
        right = self.minDepth(root.right) 
        return left + right  + 1 if (left == 0 or right == 0) else min(left, right) + 1 

java

 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;
    }
原文地址:https://www.cnblogs.com/powercai/p/11107471.html