原题网址:https://leetcode.com/problems/path-sum-iii/
You are given a binary tree in which each node contains an integer value.
Find the number of paths that sum to a given value.
The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).
The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.
Example:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3 2 11 / \ \ 3 -2 1 Return 3. The paths that sum to 8 are: 1. 5 -> 3 2. 5 -> 2 -> 1 3. -3 -> 11
方法:求两个区间的累积和的差。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private Map<Integer, Integer> map = new HashMap<>();
private int result = 0;
private void path(TreeNode node, int acc, int sum) {
if (acc + node.val == sum) {
result ++;
}
Integer c = map.get(acc + node.val - sum);
result += c == null ? 0 : c;
Integer count = map.get(acc + node.val);
if (count == null) {
count = 1;
} else {
count ++;
}
map.put(acc + node.val, count);
if (node.left != null) {
path(node.left, acc + node.val, sum);
}
if (node.right != null) {
path(node.right, acc + node.val, sum);
}
map.put(acc + node.val, -- count);
}
public int pathSum(TreeNode root, int sum) {
if (root == null) return 0;
path(root, 0, sum);
return result;
}
}