根节点到叶子节点路径之和为target
//递归吧,但是在递归到底的条件上要判断好,比如说完整路径是到叶子节点,也就是说左右子节点都为空,并且这时候的root.val==target表示找到了一个list,再返回。
但是因为我并没有直接就用target-root.val,所以在有些情况下,比如说遇到一个null节点的时候,我们不能直接返回,需要给这个list加一个值,因为返回到上一层之后我们会remove掉list中的最后一个元素,所以我们每次递归的时候都要给list加一个元素,不然返回到上一层的时候节点元素对不上,这是一个要注意的点,
还有就是如果它不是叶子节点,并且这时候的root.val>=target了,也就是下面那个else,我们就可以不继续递归下去了,直接返回就可以了,
**或者说你可以上来就直接把val值给弄掉,这样有的时候就不需要给list加一个无关紧要的值了,但是这个结束就是target==0了。
1 import java.util.ArrayList; 2 /** 3 public class TreeNode { 4 int val = 0; 5 TreeNode left = null; 6 TreeNode right = null; 7 8 public TreeNode(int val) { 9 this.val = val; 10 11 } 12 13 } 14 */ 15 public class Solution { 16 ArrayList<ArrayList<Integer>> res=new ArrayList<>(); 17 public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { 18 ArrayList<Integer> list=new ArrayList<>(); 19 if(root==null) 20 return res; 21 helper(root,target,list); 22 return res; 23 } 24 public void helper(TreeNode root, int target,ArrayList<Integer> list) 25 { 26 if(root==null) 27 { 28 list.add(0); 29 return ; 30 } 31 if(root.left==null&&root.right==null) 32 { 33 if(root.val==target) 34 { 35 list.add(root.val); 36 res.add(new ArrayList<Integer>(list)); 37 return ; 38 } 39 else 40 { 41 list.add(0); 42 return ; 43 } 44 } 45 if(root.val<target) 46 { 47 list.add(root.val); 48 helper(root.left,target-root.val,list); 49 list.remove(list.size()-1); 50 helper(root.right,target-root.val,list); 51 list.remove(list.size()-1); 52 } 53 else 54 { 55 list.add(0); 56 return ; 57 } 58 return ; 59 60 } 61 }