一:题目描述:
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
二:示例与提示
示例 1:

1 | 输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 |
示例 2:

1 | 输入:root = [1,2,3], targetSum = 5 |
示例 3:
1 | 输入:root = [1,2], targetSum = 0 |
提示:
- 树中节点的数目在范围
[0, 5000]内 -1000 <= Node.val <= 1000-1000 <= targetSum <= 1000
三:思路
深度优先搜索和回溯
- 遍历每个节点的时候targetSum减去当前节点值,当遍历到叶子节点时候,如果targetSum为0,说明存在一条路径,满足该路径上的所有节点的和为targetSum
- 终止条件是遍历到叶子节点时,是否targetSum为0,如果满足存在该路径就把path加入到res结果集中,不存在就return 返回
- 如果不是叶子节点,递归调用,避免操作空指针,先判断是否存在左右子树,然后将该节点的val值加入到当前path路径中
- 重要的是回溯,在递归调用之后,将该值从 “path” 数组中移除(回溯),以便探索其他路径。
- “pathSum” 函数通过传入根节点、目标和减去根节点值(targetSum - root.val)以及初始路径(只包含根节点的值)来调用 “getPath” 函数。
四:代码
1 | /** |