题目
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
题解
DFS:
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
if not root.left and not root.right:
return 1
min_depth = float('inf')
if root.left:
min_depth = min(self.minDepth(root.left), min_depth)
if root.right:
min_depth = min(self.minDepth(root.right), min_depth)
return min_depth + 1
时间复杂度 O(N)
空间复杂度 O(H) H是树的高度
BFS
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
queue = []
queue.append((root, 1))
while queue:
node, level = queue.pop(0)
if not node.left and not node.right:
return level
if node.left:
queue.append((node.left, level + 1))
if node.right:
queue.append((node.right, level + 1))
return 0
时间复杂度 O(N)
空间复杂度 O(N)
所有的节点要循环一遍