本题注意用到了回溯的思想,每次递归完下一层,返回上一层后,target的值不变
当遇到叶节点时判断target值是否为0,
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root==null) return false;
targetSum -= root.val;
if(root.left==null && root.right==null){
if(targetSum==0) return true;
else return false;
}
return hasPathSum(root.left,targetSum) || hasPathSum(root.right,targetSum);
}
本题跟上一题基本类似,只是多了个list来保存路径的值
注意把list加入res时,要新创建个new list复制原来的list值放入res,否则remove以后,原list中的值会变
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
recur(root,targetSum,list,res);
return res;
}
public void recur(TreeNode root,int sum,List<Integer> list, List<List<Integer>> res){
if(root==null) return;
sum -= root.val;
list.add(root.val);
if(root.left==null && root.right==null){
if(sum==0) res.add(new ArrayList<>(list));
else return;
}
if(root.left!=null){
recur(root.left,sum,list,res);
list.remove(list.size()-1);
}
if(root.right!=null){
recur(root.right,sum,list,res);
list.remove(list.size()-1);
}
}