LeetCode第112题:路径总和

172 阅读1分钟

题干

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。

叶子节点 是指没有子节点的节点。

示例 1:

img

 输入: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
 };

\