1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution { public int pathSum(TreeNode root, int targetSum) { Map<Long, Integer> prefixSumToCountMap = new HashMap<>(); prefixSumToCountMap.put(0L, 1); return dfs(prefixSumToCountMap, root, 0, targetSum); }
private int dfs(Map<Long, Integer> prefixSumToCountMap, TreeNode node, long prefixSum, int targetSum) { if (node == null) { return 0; }
prefixSum += node.val; int pathCount = prefixSumToCountMap.getOrDefault(prefixSum - targetSum, 0); prefixSumToCountMap.put(prefixSum, prefixSumToCountMap.getOrDefault(prefixSum, 0) + 1); pathCount += dfs(prefixSumToCountMap, node.left, prefixSum, targetSum); pathCount += dfs(prefixSumToCountMap, node.right, prefixSum, targetSum); prefixSumToCountMap.put(prefixSum, prefixSumToCountMap.get(prefixSum) - 1); return pathCount; } }
|