javascript
var pathSum = function(root, targetSum) {
let count=0,sum=0;
const idx=new Map();
function dfs(root){
if(!root) return;
idx.set(sum,(idx.get(sum)??0)+1);
sum+=root.val;
const j=sum-targetSum;
count+=idx.get(j)??0;
dfs(root.left);
dfs(root.right);
sum -= root.val;
idx.set(sum, idx.get(sum) - 1);
}
dfs(root);
return count;
};
算法核心同题560 前缀和+哈希表
注意:要回溯! 如果不回溯左子树会污染右子树,同时回溯时要与添加时对称
javascript
idx.set(sum,(idx.get(sum)??0)+1);
sum+=root.val;
//对称
sum -= root.val;
idx.set(sum, idx.get(sum) - 1);