Skip to main content

129.路径总和从根到叶

标签: tree, depth-first-search, binary-search-tree

难度: Medium

通过率: 67.37%

原题链接: https://leetcode.com/problems/sum-root-to-leaf-numbers/description/

题目描述

给定一个只包含数字0到9的二叉树,每条从根到叶的路径都代表一个数字。返回所有根到叶路径数字的总和。

解题思路

要解决这个问题,我们需要遍历二叉树的每一条从根节点到叶节点的路径,并计算这些路径所表示的数字的总和。可以采用递归的方式进行深度优先搜索(DFS),在遍历的过程中逐步构建每条路径对应的数字。在每一步,将经过的节点的值与当前的数字进行组合,例如当前的数字为current,节点值为node.val,那么新的数字就是 current * 10 + node.val。递归到叶节点时,将计算出的数字加入总和。

代码实现

class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

def sumNumbers(root):
# 定义一个递归函数,用于遍历树
def dfs(node, current_sum):
if not node:
return 0

# 更新当前路径的数字
current_sum = current_sum * 10 + node.val

# 如果到达叶节点,返回当前完整的路径数字
if not node.left and not node.right:
return current_sum

# 递归计算左子树和右子树的路径数字总和
left_sum = dfs(node.left, current_sum)
right_sum = dfs(node.right, current_sum)

return left_sum + right_sum

return dfs(root, 0)

复杂度分析

时间复杂度:O(N)O(N),其中 NN 是树中节点的数目。我们需要遍历每个节点。 空间复杂度:最坏情况下是 O(H)O(H),其中 HH 是树的高度,考虑到递归调用栈的深度。