📅  最后修改于: 2023-12-03 15:26:36.326000             🧑  作者: Mango
在二叉树中,从根节点到叶子节点的所有路径都被称为“根到叶路径”。本题要求查找给定二叉树的所有根到叶路径,并计算它们的路径总和。
我们可以采用深度优先搜索(DFS)的思想来解决此问题。从根节点开始,递归遍历二叉树的每个节点,并将它们的值添加到路径总和中。当我们到达叶子节点时,将路径总和添加到结果列表中。
具体来说,我们可以定义一个递归函数 dfs(node, path_sum, res)
,其中 node
表示当前节点,path_sum
表示当前路径的总和,res
表示结果列表。在函数中,我们首先将当前节点的值添加到路径总和中,并判断当前节点是否是叶子节点。如果是叶子节点,则将路径总和添加到结果列表中,否则递归遍历当前节点的左右子树。遍历完当前节点的左右子树后,要将路径总和减去当前节点的值(即回溯到上一层递归)。
具体的实现细节请见代码片段。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def binaryTreePaths(self, root):
"""
:type root: TreeNode
:rtype: List[str]
"""
def dfs(node, path_sum, res):
if node is None:
return
path_sum += node.val
if node.left is None and node.right is None:
res.append(path_sum)
dfs(node.left, path_sum, res)
dfs(node.right, path_sum, res)
path_sum -= node.val
res = []
dfs(root, 0, res)
return res