question
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:
- 5 -> 3
- 5 -> 2 -> 1
- -3 -> 11
explaination
// 用到回溯法 用hashmap保存前几次相加的结果 若当前sum减去target的值 在hashmap中存在 则证明有一段节点的和为target
solution
public int pathSum(TreeNode root, int sum) {
HashMap<Integer,Integer> map =new HashMap<Integer, Integer>();
map.put(0,1);
return helper(root,0,sum,map);
}
public int helper(TreeNode root,int sum,int target,HashMap<Integer,Integer> map)
{
if(root==null)
return 0;
sum+=root.val;
int res=map.getOrDefault(sum-target,0);
map.put(sum,map.getOrDefault(sum,0)+1);
res+=helper(root.left,sum,target,map)+helper(root.right,sum,target,map);
map.put(sum,map.get(sum)-1);
return res;
}