题目
题目来源:力扣(LeetCode)
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
叶子节点 是指没有子节点的节点。
思路分析
根据题意,我们从根节点开始,每经过一个节点,就让 targetSum 的值减去当前节点的值,然后再将相减后的 targetSum 传递给当前节点的左右子节点;
如果当前节点没有子节点,就要判断 targetSum 是否为 0,如果为 0,则证明至少存在一条符合题意的路径;
如果到达某个叶子节点时,targetSum 的值 为0,那么就存在符合题意的路径;
如果到达了某个叶子节点,targetSum 的值不为 0,则证明没有符合题意的路径;
我们用递归的方式来解决该问题:
const hasPathSum = function (root, targetSum) {
// 根节点不存在,直接返回false
if (!root) return false;
// 到达某个叶子节点时,判断 targetSum 与当前叶子节点的值是否相等,即 targetSum 与当前节点的值相减后是否为 0
// 若为 0,则存在符合题意的路径
// 若不为 0,则不存在符合题意的路径
if (!root.left && !root.right) return targetSum === root.val;
// 将 targetSum 的值与当前节点的值相减
targetSum -= root.val;
// 将相减后的 targetSum 传递给当前节点的左右子节点,继续递归遍历节点
return hasPathSum(root.left, targetSum) || hasPathSum(root.right, targetSum);
}