-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMain50.java
More file actions
52 lines (46 loc) · 1.39 KB
/
Main50.java
File metadata and controls
52 lines (46 loc) · 1.39 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package JZOfferTuJi;
import java.util.HashMap;
public class Main50 {
public int pathSum(TreeNode root, int targetSum) {
if(root == null){
return 0;
}
int ret = rootSum(root, targetSum);
ret += pathSum(root.left, targetSum);
ret += pathSum(root.right, targetSum);
return ret;
}
public int rootSum(TreeNode root, int targetSum){
int ret = 0;
if(root == null){
return 0;
}
int val = root.val;
if(val == targetSum){
ret++;
}
ret += rootSum(root.left, targetSum - val);
ret += rootSum(root.right, targetSum - val);
return ret;
}
}
class Main50_1{
public int pathSum(TreeNode root, int targetSum){
HashMap<Long, Integer> prefix = new HashMap<>();
prefix.put(0L, 1);
return dfs(root, prefix, 0, targetSum);
}
private int dfs(TreeNode root, HashMap<Long, Integer> prefix, long curr, int targetSum) {
if(root == null){
return 0;
}
int ret = 0;
curr += root.val;
ret = prefix.getOrDefault(curr - targetSum, 0);
prefix.put(curr, prefix.getOrDefault(curr, 0) + 1);
ret += dfs(root.left, prefix, curr, targetSum);
ret += dfs(root.right, prefix, curr, targetSum);
prefix.put(curr, prefix.getOrDefault(curr, 0) - 1);
return ret;
}
}