Leetcode_hot100_437.路径总和III
题目要求
示例 1:

输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
输出:3
解释:和等于 8 的路径有 3 条,如图所示。
示例 2:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:3
前缀和
- 与 Leetcode 560. 和为 K 的子数组 类似,我们可以使用前缀和来解决这个问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution {
private int ans = 0; public int pathSum(TreeNode root, int targetSum) { Map<Long, Integer> prefixSumCount = new HashMap<>(); prefixSumCount.put(0L, 1); dfs(root, 0L, targetSum, prefixSumCount); return ans; }
public void dfs(TreeNode node, long currentSum, int targetSum, Map<Long, Integer> prefixSumCount) { if (node == null) { return; }
currentSum += node.val; ans += prefixSumCount.getOrDefault(currentSum - targetSum, 0);
prefixSumCount.put(currentSum, prefixSumCount.getOrDefault(currentSum, 0) + 1);
dfs(node.left, currentSum, targetSum, prefixSumCount); dfs(node.right, currentSum, targetSum, prefixSumCount);
prefixSumCount.put(currentSum, prefixSumCount.get(currentSum) - 1); } }
|
- 时间复杂度:O(n)。
- 空间复杂度:O(n)。返回值不计入。