📅  最后修改于: 2023-12-03 14:54:56.595000             🧑  作者: Mango
给定一个二叉树,找到其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
注意:叶子节点是指没有子节点的节点。
对于一颗二叉树,它的最小深度等于左右子树的最小深度加1。
因此可以采用递归的方式,依次计算左右子树的最小深度,然后取其中的较小值并加1,即可得到这颗二叉树的最小深度。
需要注意的是,当一个节点的左右子树其中之一为空时,其最小深度应该是非空子树的最小深度加1,而不是0。
采用层序遍历的方式可以迭代地计算出每一个节点的深度,并在访问到叶子节点时即可得到最小深度。
具体地,对于每一层的节点,它们的深度都是相同的,因此可以开一个队列,存储该层的节点,并记录下它们的深度。然后依次访问这些节点的左右子树,如果遇到了叶子节点,即可得到最小深度。
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
left_depth = self.minDepth(root.left)
right_depth = self.minDepth(root.right)
if not root.left or not root.right:
return left_depth + right_depth + 1
return min(left_depth, right_depth) + 1
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
queue = [(root, 1)]
while queue:
node, depth = queue.pop(0)
if not node.left and not node.right:
return depth
if node.left:
queue.append((node.left, depth + 1))
if node.right:
queue.append((node.right, depth + 1))
对于本题,使用递归和迭代都可以得到正确的结果,时间复杂度均为$O(n)$,空间复杂度取决于二叉树的形态,最坏情况下空间复杂度为$O(n)$。需要注意的是,当一个节点的左右子树其中之一为空时,其最小深度应该是非空子树的最小深度加1,而不是0。