1. 题目:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:2
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6]
输出:5
2. 我的代码:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def minDepth(self, root: Optional[TreeNode]) -> int: # 后序遍历 # 递归 def minDep(node): # 终止条件 if node == None: return 0 left_minDep = minDep(node.left) right_minDep = minDep(node.right) if left_minDep == 0 or right_minDep == 0: return 1 + left_minDep + right_minDep else: return 1 + min(left_minDep, right_minDep) return minDep(root)
这个题继续使用求解高度的后序遍历求解,比较方便。
首先确定终止条件:叶子节点时返回;然后确定后序遍历的逻辑,但是,存在的一个bug是,最小深度的定义为从叶子节点到根节点的最小路径。所以,应当排除掉有一边是None的节点,不然都会被这一侧同化成0。统一返回1 + left_minDep + right_minDep
即可。
对于叶子节点或者两侧都非空的节点,返回1 + min(left_minDep, right_minDep)
即可。