import java.util.ArrayList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.*; public class Solution { public int sum(List<Integer> list) { return list.stream().reduce(0, (s1, s2) -> s1 + s2); } public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { ArrayList<ArrayList<Integer>> list = new ArrayList<>(); if (root == null) { return list; } Stack<TreeNode> queue = new Stack<>(); Stack<ArrayList<Integer>> paths = new Stack<>(); queue.push(root); ArrayList<Integer> vals = new ArrayList<>(); vals.add(root.val); paths.push(vals); while (!queue.isEmpty()) { TreeNode node = queue.pop(); ArrayList<Integer> path = paths.pop(); if (node.left == null && node.right == null && sum(path) == target) { list.add(path); } if (node.right != null) { queue.push(node.right); ArrayList<Integer> integers = new ArrayList<>(path); integers.add(node.right.val); paths.add(integers); } if (node.left != null) { queue.push(node.left); ArrayList<Integer> integers = new ArrayList<>(path); integers.add(node.left.val); paths.push(integers); } } return list; } }