题目:输入一颗二叉树和一个整数,打印出二叉树中节点的值的和为输入整数的是所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
1 public class Solution { 2 ArrayList<Integer> path = new ArrayList<Integer>(); 3 ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); 4 5 6 public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) { 7 if(root == null) { 8 return list; 9 } 10 11 // 每访问一个结点的时候,都把当前结点添加到路径中,并调整target的值 12 path.add(root.val); 13 target = target - root.val; 14 15 // 已经到了叶节点,并且path中的值和为target,则把当前path添加到输出列表中 16 if(target == 0 && root.left == null && root.right == null) { 17 list.add(new ArrayList<Integer>(path)); 18 } 19 20 // 否则继续遍历 21 FindPath(root.left, target); 22 FindPath(root.right, target); 23 24 // 已到叶节点之后会跳过两个递归函数到这里,此时要把最后一个结点从路径中删除,才能返回上层结点 25 path.remove(path.size()-1); 26 return list; 27 28 } 29 }