题目链接
思路
二叉树的深度遍历,穷举所有可能
代码
class Solution {
public int pathSum(TreeNode root, int targetSum) {
if(root == null)
return 0;
int path += path(root,targetSum);
path += pathSum(root.left,targetSum);
path += pathSum(root.right,targetSum);
return path;
}
public int path(TreeNode root,int targetSum){
int res = 0;
if(root == null)
return 0;
int val = targetSum - root.val;
if(val == 0)
res++;
res += path(root.left,val);
res += path(root.right,val);
return res;
}
}
优化
-
思路
前缀和
-
代码
class Solution { public int pathSum(TreeNode root, int targetSum) { HashMap<Integer, Integer> prefix = new HashMap<>(); prefix.put(0, 1); return dfs(root, prefix, 0, targetSum); } public int dfs(TreeNode root, Map<Integer, Integer> prefix, int 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; } }