1. 程式人生 > >《劍指offer》系列 二叉樹中和為某一值的路徑(Java)

《劍指offer》系列 二叉樹中和為某一值的路徑(Java)

連結

牛客: 二叉樹中和為某一值的路徑

題目描述

輸入一顆二叉樹的跟節點和一個整數,打印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)

思路

題目給定的函式返回的是一個包含List的List,類似一個二維陣列,這表示路徑可能不止一條,利用遞迴+回溯進行處理。

程式碼

import java.util.ArrayList;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    private ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>();
    private ArrayList<Integer> list = new ArrayList<Integer>();
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
        if(root == null) 
            return listAll;
        list.add(root.val);
        target -= root.val;
        //這裡要關注一下為什麼要在外面加上new ArrayList<Integer>()
        if(target == 0 && root.left == null && root.right == null)
            listAll.add(new ArrayList<Integer>(list));			
        FindPath(root.left, target);
        FindPath(root.right, target);
        //這裡的回溯很重要
        list.remove(list.size()-1);
        return listAll;
    }
}