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

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

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

示例:

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

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

题目要求找出二叉树的最小深度,即找出二叉树中所有从根节点出发的子树的深度中的最小值。因此,我们可以依次统计从根节点出发的每一棵子树的深度,并使用全局变量minD来保存当前最小的深度。当遍历完所有可能的路径后,返回minD保存的最小深度值即可。

import sys
class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if root == None: return 0
   
		# 使用全局变量minD保存可能的最小深度
        global minD 
        minD = sys.maxsize
        
        def find(root, depth = 0):
            global minD
            if root: depth += 1
			
			# 判断是否到达叶子节点
            isLeaf = None
            if root.left == None and root.right == None:
                isLeaf = True
                
            if root.left:
                find(root.left, depth)
            if root.right:
                find(root.right, depth)
            # 更新minD
            if isLeaf and depth < minD:
                minD = depth
        
        find(root)
        return minD

此外,根据前面题目中求解二叉树深度的思路,我们同样可以使用递归法来进行求解

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if root == None: return 0

        if not root.left:
            return self.minDepth(root.right) + 1
        if not root.right:
            return self.minDepth(root.left) + 1

        return min(self.minDepth(root.left), self.minDepth(root.right)) + 1

你可能感兴趣的:(Leetcode)