📅  最后修改于: 2023-12-03 15:10:01.463000             🧑  作者: Mango
给定一棵二叉树和一个整数 k,需要找到所有从根节点到叶子节点的路径中,节点值之和为 k 的路径,并返回这些路径。
输入:
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
目标和: 22
输出:
[
[5,4,11,2],
[5,8,4,5]
]
使用 DFS 深度优先搜索算法遍历整个二叉树。从每个节点开始,递归搜索此节点到所有叶子节点的路径,检查路径的节点值之和是否等于目标和 k,如果是,则将该路径添加到结果列表中。
为了实现这个算法,我们将从根节点开始的路径作为一个列表进行跟踪,并在遇到叶子节点时检查路径的节点值之和是否等于目标和 k。
class Solution:
def pathSum(self, root: TreeNode, k: int) -> List[List[int]]:
res = []
def dfs(node, target, path):
if not node:
return
if not node.left and not node.right and target == node.val:
res.append(path + [node.val])
return
dfs(node.left, target - node.val, path + [node.val])
dfs(node.right, target - node.val, path + [node.val])
dfs(root, k, [])
return res