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

Posted powercai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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;
    

以上是关于[LeetCode] 111. 二叉树的最小深度的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 111. 二叉树的最小深度

LeetCode 111. 二叉树的最小深度

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

LeetCode-111-二叉树的最小深度

LeetCode第111题—二叉树的最小深度—Python实现

111. 二叉树的最小深度