题目描述1

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

说明: 叶子节点是指没有子节点的节点。

示例1

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1

[5,4,8,11,null,13,4,7,2, null, null,null,1]
22

思想

  • 注意:题目说了叶子节点是没有子节点的节点,那么我们只要判断一下当前节点有没有root.leftroot.right 即可, 另外每次递归都减去当前target = sum - root.val, 然后递归左右子树就可以了

递归实现

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} sum
 * @return {boolean}
 */
var hasPathSum = function(root, sum) {
    if(root == null ) {
        return false;
    }

    const value = root.val;
    const target = sum - value;
    if(target == 0 && (root.left == null && root.right == null)) {
        return true;
    }
    return hasPathSum(root.left, target) || hasPathSum(root.right, target)

};