AlgoMaster Logo

Path Sum III

tree=[10, 5, -3, 3, 2, null, 11, 3, -2, null, 1],targetSum=8
1class Solution {
2    int result = 0;
3
4    public int pathSum(TreeNode root, int targetSum) {
5        Map<Long, Integer> prefixSumCount = new HashMap<>();
6        prefixSumCount.put(0L, 1); // Base case: empty path has sum 0
7        dfs(root, 0L, targetSum, prefixSumCount);
8        return result;
9    }
10
11    private void dfs(TreeNode node, long currentSum, int targetSum,
12                     Map<Long, Integer> prefixSumCount) {
13        if (node == null) {
14            return; // base case: null node
15        }
16
17        // Update current sum
18        currentSum += node.val;
19
20        // Count paths ending at this node
21        result += prefixSumCount.getOrDefault(currentSum - targetSum, 0);
22
23        // Add current sum to prefix map
24        prefixSumCount.put(currentSum, prefixSumCount.getOrDefault(currentSum, 0) + 1);
25
26        // Recurse into left and right subtrees
27        dfs(node.left, currentSum, targetSum, prefixSumCount);
28        dfs(node.right, currentSum, targetSum, prefixSumCount);
29
30        // Backtrack: remove current sum from prefix map
31        prefixSumCount.put(currentSum, prefixSumCount.get(currentSum) - 1);
32    }
33}
0 / 89
105-332113-21prefixSumCount