一:题目描述:
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点。
二:示例与提示
示例 1:

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

1 | 输入:root = [1,2,3], targetSum = 5 |
示例 3:
1 | 输入:root = [], targetSum = 0 |
提示:
- 树中节点的数目在范围
[0, 5000]内 -1000 <= Node.val <= 1000-1000 <= targetSum <= 1000
三:思路
深度优先搜索
- targetsum是总和,每次遍历节点时候减去当前节点的值,当遍历到叶子节点时候,如果targetsum减到0,就说明存在一条路径符合该路径上的值全加起来等于targetSum
- 在每次递归调用时,首先检查终止条件。当遍历到叶子节点时,如果目标和正好为0,则说明找到了符合条件的路径,返回
true;否则,返回false - 如果当前节点不是叶子节点,需要继续向下递归遍历。首先对左子树调用
isPath函数,传递的目标和为targetSum - root.left.val(减去当前节点值)。如果返回值为true,则说明在左子树中找到了符合条件的路径,直接返回true。否则,继续对右子树调用isPath函数,传递的目标和为targetSum - root.right.val(减去当前节点值)。如果返回值为true,则说明在右子树中找到了符合条件的路径,直接返回true。 - 如果左右子树都没有找到符合条件的路径,则返回
false。 - 最后,主函数
hasPathSum首先检查根节点是否为空,如果为空则直接返回false。否则,通过调用isPath函数,传递的目标和为targetSum - root.val(减去根节点值),判断是否存在符合条件的路径。
四:代码
1 | /** |