輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和爲輸入整數的全部路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所通過的結點造成一條路徑。(注意: 在返回值的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 }