Skip to content

111. 二叉树的最小深度

题目

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

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

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

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

提示:

  • 树中节点数的范围在 [0, 10^5]
  • -1000 <= Node.val <= 1000

解答

思路

注意单边为空的情况,此时需要返回另一边的长度。

代码

python
class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        
        l_min = self.minDepth(root.left)
        r_min = self.minDepth(root.right)

        if root.left is None or root.right is None:
            return l_min + r_min + 1

        return min(l_min, r_min) + 1

另一种计数法:

python
class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        if root is None:
            return 0
        
        ans = inf
        
        def f(node, cnt):
            if node is None:
                return
            
            cnt += 1
            nonlocal ans
            if node.left is None and node.right is None:
                ans = min(ans, cnt)

            f(node.left, cnt)
            f(node.right, cnt)
        
        f(root, 0)

        return ans

Released under the MIT License.