📅  最后修改于: 2023-12-03 14:49:26.124000             🧑  作者: Mango
在二叉树中,从根节点到叶节点的所有路径形成的数字可以看作是一个整数。本文将介绍如何计算这些数字的总和。
我们可以使用深度优先搜索(DFS)递归的方式,遍历二叉树的每一个节点,每当遇到一个叶节点时,便将该叶节点所代表的数字加入到结果中。
def sumNumbers(root):
if not root:
return 0
def dfs(node, num):
if not node.left and not node.right:
return num * 10 + node.val
left_sum = dfs(node.left, num * 10 + node.val) if node.left else 0
right_sum = dfs(node.right, num * 10 + node.val) if node.right else 0
return left_sum + right_sum
return dfs(root, 0)
时间复杂度为 $O(n)$,其中 $n$ 为二叉树中节点的个数。
我们也可以使用广度优先搜索(BFS)迭代的方式,遍历二叉树的每一个节点,每当遇到一个叶节点时,便将该叶节点所代表的数字加入到结果中。
def sumNumbers(root):
if not root:
return 0
queue = [(root, root.val)]
res = 0
while queue:
node, num = queue.pop(0)
if not node.left and not node.right:
res += num
if node.left:
queue.append((node.left, num * 10 + node.left.val))
if node.right:
queue.append((node.right, num * 10 + node.right.val))
return res
时间复杂度为 $O(n)$,其中 $n$ 为二叉树中节点的个数。
本文介绍了两种不同的方法,DFS递归和BFS迭代,用于计算从根到叶路径形成的所有数字的总和。这种问题在面试中出现的频率较高,掌握这两种方法会对我们的面试有很大的帮助。