题干
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:递归
我们需要设置一个当前的目标值,然后再每一次进入递归时减去当前值,如果到叶子节点它的值为0时就符合我们的条件了,所以我们递归的结束条件为当当前节点为叶子节点,并且当前的值迭代至0时。
接着就是递归里面的逻辑,我们使进行减法运算后的targetnum作为下一次的递归参数传入,再去遍历左右左节点。最后只要我们的right和left有任意一方为true时我们就返回true
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {boolean}
*/
var hasPathSum = function (root, targetSum) {
if (root == null) {
return false
}
let sumAdd = targetSum - root.val
if (sumAdd==0&&root.left==null&&root.right==null){
return true
}
let left=hasPathSum(root.left, sumAdd)
let right=hasPathSum(root.right, sumAdd)
return left||right
};
\