class Solution {
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root == null) return false;
return dfs(root,targetSum,0) == 1 ? true: false;
}
public int dfs(TreeNode node,int targetSum,int num){
int tmp = node.val;
int l = -1;
int r = -1;
if(num + tmp == targetSum){
if(node.left == null && node.right == null) return 1;
}
if(node.left != null) l = dfs(node.left, targetSum, num + tmp);
if(node.right != null) r = dfs(node.right, targetSum, num + tmp);
return Math.max(l,r);
}
}
必须用dfs遍历整个二叉树,因为如果路径中间出现了和为target却不是叶子结点的情况,不能直接return -1,有可能后续路径之和是0,不影响最终结果仍是target。
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
if(root == null) return res;
dfs(root, targetSum, 0, res, list);
return res;
}
public void dfs(TreeNode node, int targetSum,int num,List<List<Integer>> arr,List<Integer> list){
int tmp = node.val;
list.add(node.val);
if(num + node.val == targetSum){
if(node.left == null && node.right == null) {
arr.add(new ArrayList<>(list));
}
}
if(node.left != null){
dfs(node.left, targetSum, num + tmp, arr, list);
list.remove(list.size() - 1);
}
if(node.right != null){
dfs(node.right, targetSum, num + tmp, arr, list);
list.remove(list.size() - 1);
}
}
}