Medium
Given the root
of a binary tree and an integer targetSum
, return the number of paths where the sum of the values along the path equals targetSum
.
The path does not need to start or end at the root or a leaf, but it must go downwards (i.e., traveling only from parent nodes to child nodes).
Example 1:
Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
Output: 3
Explanation: The paths that sum to 8 are shown.
Example 2:
Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
Output: 3
Constraints:
[0, 1000]
.-109 <= Node.val <= 109
-1000 <= targetSum <= 1000
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} targetSum
* @return {number}
*/
var pathSum = function(root, targetSum) {
const h = new Map()
return dfs(root, targetSum, h, 0)
};
function dfs(root, targetSum, h, currentSum) {
let count = 0
if (root === null) {
return 0
}
const sumKey = currentSum + root.val
if (sumKey === targetSum) {
count += 1
}
if (h.has(sumKey - targetSum)) {
count += h.get(sumKey - targetSum)
}
h.set(sumKey, (h.get(sumKey) || 0) + 1)
count += dfs(root.left, targetSum, h, sumKey)
count += dfs(root.right, targetSum, h, sumKey)
h.set(sumKey, h.get(sumKey) - 1)
return count
};
export { pathSum }