📌  相关文章
📜  从根到叶路径形成的所有数字的总和(1)

📅  最后修改于: 2023-12-03 14:49:26.124000             🧑  作者: Mango

从根到叶路径形成的所有数字的总和

在二叉树中,从根节点到叶节点的所有路径形成的数字可以看作是一个整数。本文将介绍如何计算这些数字的总和。

方法一:DFS递归

我们可以使用深度优先搜索(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迭代

我们也可以使用广度优先搜索(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迭代,用于计算从根到叶路径形成的所有数字的总和。这种问题在面试中出现的频率较高,掌握这两种方法会对我们的面试有很大的帮助。