package code;
import java.util.HashMap;
/*
* 437. Path Sum III
* sum
* Easy
* Tree
* khashmap.
* Tips dfs
* ==0+==sum
* lc560
* Easy
* lc112, lc113, lc437, lc129, lc124, lc337
* lc437 lc572
* lc303, lc437, lc560
*/
public class lc437 {
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public static int pathSum(TreeNode root, int sum) { //
if (root == null) return 0;
return dfs(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum);
}
public static int dfs(TreeNode root, int sum) { //
if (root == null) return 0;
if (root.val == sum) return 1 + dfs(root.left, sum - root.val) + dfs(root.right, sum - root.val);//10
return dfs(root.left, sum - root.val) + dfs(root.right, sum - root.val);
}
public static int pathSum2(TreeNode root, int sum) {//k
if (root == null) return 0;
HashMap hs = new HashMap();
hs.put(0, 1);
return helper(root, sum, hs, 0);
}
public static int helper(TreeNode root, int sum, HashMap hs, int cur_sum) {
if (root == null)
return 0;
cur_sum += root.val;
int res = hs.getOrDefault(cur_sum - sum, 0); //
hs.put(cur_sum, hs.getOrDefault(cur_sum, 0)+1); //
res += helper(root.left, sum, hs, cur_sum); //
res += helper(root.right, sum, hs, cur_sum);
hs.put(cur_sum, hs.get(cur_sum)-1);
return res;
}
}