题目介绍

题解
本题做法和 560 题是一样的,前缀和+哈希表。
在二叉树上,前缀和相当于从根节点开始的路径元素和。用哈希表 cnt 统计前缀和的出现次数,当我们递归到节点 node 时,设从根到 node 的路径元素和为 s,那么就找到了 cnt[s−targetSum] 个符合要求的路径,加入答案。
代码如下:
class Solution {
private int ans;
public int pathSum(TreeNode root, int targetSum) {
Map<Long, Integer> cnt = new HashMap<>();
cnt.put(0L, 1);
dfs(root, 0, targetSum, cnt);
return ans;
}
private void dfs(TreeNode node, long sum, int targetSum, Map<Long, Integer> cnt) {
if (node == null) {
return;
}
sum += node.val;
ans += cnt.getOrDefault(sum - targetSum, 0);
cnt.put(sum, cnt.getOrDefault(sum, 0) + 1);
dfs(node.left, sum, targetSum, cnt);
dfs(node.right, sum, targetSum, cnt);
cnt.put(sum, cnt.getOrDefault(sum, 0) - 1); // 恢复现场
}
}
1037

被折叠的 条评论
为什么被折叠?



