剑指offer——二叉树中和为某一值的路径
题目描述
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
考察点:
1.复杂问题简单化,即由一个简单实例分析确定求解步骤
2.前序遍历的概念(根--》左叶子--》右叶子)
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 private ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>(); 17 private ArrayList<Integer> list = new ArrayList<Integer>(); 18 //如果放在里面的话每次递归的时候就会重新new一个listALL和list,这样会把上一步的结果覆盖,所以必须写在外面 19 public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { 20 if(root == null) return listAll; 21 list.add(root.val); 22 target -= root.val; 23 if(target == 0&&root.left == null&& root.right == null) 24 listAll.add(new ArrayList<Integer>(list));//不重新new的话从始至终listAll中所有引用都指向了同一个一个list 25 FindPath(root.left,target); 26 FindPath(root.right,target); 27 list.remove(list.size()-1);//移除最后一个元素,深度遍历完一条路径后要回退 28 return listAll; 29 } 30 }