import java.util.ArrayList;
import java.util.Stack;
/**
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 ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target){
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
//Stack<TreeNode> stack = new Stack<TreeNode>();
if(root==null){
return list;
}
ArrayList<Integer> temp = new ArrayList<>();
findResultPath(root, list, temp, target);
return list;
}
private void findResultPath(TreeNode node, ArrayList<ArrayList<Integer>> list, ArrayList<Integer> temp, int target) {
temp.add(node.val);
target -= node.val;
if(node.left == null && node.right == null){
if(target == 0){
list.add(new ArrayList<Integer>(temp));
}
temp.remove(temp.size()-1);
return;
}
if(node.left != null){
findResultPath(node.left, list, temp, target);
}
if(node.right != null){
findResultPath(node.right, list, temp, target);
}
temp.remove(temp.size()-1);
}
}