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

題目描述
輸入一顆二叉樹和一個整數(shù),打印出二叉樹中結(jié)點值的和為輸入整數(shù)的所有路徑。路徑定義為從樹的根結(jié)點開始往下一直到葉結(jié)點所經(jīng)過的結(jié)點形成一條路徑。

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
    
    private int sum = 0;
    private ArrayList<ArrayList<Integer>> array = new ArrayList<ArrayList<Integer>>();
    private ArrayList<Integer> a = new ArrayList<Integer>();
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
        
        find(root, target);
        return array;
    }
    private void find(TreeNode root, int target) {
        
        if(root == null)
            return;
        sum += root.val;
        if(sum < target) {
            
            a.add(root.val);
            find(root.left, target);
            find(root.right, target);
            a.remove(a.size() - 1);
            sum -= root.val;
        }else {
            
            if(sum > target) {
                
                sum -= root.val;
                return;
            }else {
                
                if(root.left == null && root.right == null) {
                    
                    ArrayList<Integer> temp = new ArrayList<Integer>();
                    for(int i : a){
                        temp.add(i);
                    }
                    temp.add(root.val);
                    array.add(temp);
                }
                sum -= root.val;
                return;
            }
        }
    }
    public static void main(String[] args) {
        
        Solution obj = new Solution();
        int[] arr = {10,5,12,4,7};
        TreeNode root = build(arr);
        obj.FindPath(root, 22);
    }
    private static TreeNode build(int[] arr){
        
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        if(arr == null || arr.length == 0) {
            
            return null;
        }
        TreeNode root = new TreeNode(arr[0]);
        int i = 0;
        int length = arr.length;
        queue.add(root);
        while(!queue.isEmpty()) {
            
            TreeNode temp = queue.poll();
            i++;
            if(i <length) {
                
                TreeNode left = new TreeNode(arr[i]);
                temp.left = left;
                queue.add(left);
            }else{
                
                temp.left = null;
            }
            i++;
            if(i < length) {
                
                TreeNode right = new TreeNode(arr[i]);
                temp.right = right;
                queue.add(right);
            }else {
                
                temp.right = null;
            }
        }
        return root;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容