public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
List<List<Integer>> res =new ArrayList<List<Integer>>();
pathSum(root,targetSum,new ArrayList<Integer>(),res);
return res;
}
public void pathSum(TreeNode root,int sum,List<Integer> sol,List<List<Integer>> res){
if(root==null) return;
sol.add(root.val);
if(root.left==null&&root.right==null&&sum==root.val){
res.add(new ArrayList<Integer>(sol));
}else{
pathSum(root.left,sum-root.val,sol,res);
pathSum(root.right,sum-root.val,sol,res);
}
sol.remove(sol.size()-1);
}
sol.remove(sol.size()-1);这段代码是回溯,到叶子结点后,需要挨个挨个往上删除之前用过的节点