437. 路径总和 III
前缀和+递归:
java
class Solution {
private int ans;
public int pathSum(TreeNode root, int targetSum) {
Map<Long,Integer> count = new HashMap<>();
count.put(0L,1);
Long pre = 0L;
dfs(root,targetSum,pre,count);
return ans;
}
private void dfs(TreeNode node,int targetSum,Long pre,Map<Long,Integer> count){
if(node == null){
return;
}
pre += node.val;
ans += count.getOrDefault(pre-targetSum,0);
count.merge(pre,1,Integer::sum);
dfs(node.left,targetSum,pre,count);
dfs(node.right,targetSum,pre,count);
//恢复,因为左边树弄完还有右边树
count.merge(pre,-1,Integer::sum);
}
}
时间复杂度:O(N)
空间复杂度:O(N)