二叉树中和为某一值的路径

题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容