题目地址: 链接
思路: 通过前缀和 + 回溯,每次记录当前前缀和,每次记录当前离 targetSum 的偏移量, 统计当前满足条件的路径数量。
js
/**
* 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) {
let map = new Map();
let ans = 0;
function dfs(root, pre) {
if(!root) return null;
let ppre = pre + root.val;
let check_num = ppre - targetSum; // 偏移量
ans += map.get(check_num) || 0;
map.set(ppre, map.get(ppre) + 1 || 1);
dfs(root.left, ppre);
dfs(root.right,ppre);
map.set(ppre, map.get(ppre) - 1);
}
map.set(0, 1);
dfs(root, 0);
return ans;
};