### 112. Path Sum

Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.

Note: A leaf is a node with no children.

Example:

Given the below binary tree and sum = 22,

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

return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.

### Analyze

``````/**
* 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) return false
return ifHasPathSum(root, sum)
}

var ifHasPathSum = function(node, sum) {
if (!node && sum !== 0) return false
if (!node && sum === 0) return true
const remainingVal = sum - node.val
const leftResult = ifHasPathSum(node.left, remainingVal)
if (leftResult) return true
const rightResult = ifHasPathSum(node.right, remainingVal)
if (rightResult) return true
return false
}``````

``````    1
/   \
null   2``````

``````/**
* 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) return false
return ifHasPathSum(root, sum)
}

var ifHasPathSum = function(node, sum) {
if (!node) return sum === 0
const remainingVal = sum - node.val
return ifHasPathSum(node.left, remainingVal) || ifHasPathSum(node.right, remainingVal)
}``````

``````/**
* 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) return false
if (!root.left && !root.right) return root.val === sum
const remainingVal = sum - root.val
return hasPathSum(root.left, remainingVal) || hasPathSum(root.right, remainingVal)
}``````