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 {
//记录路径
static ArrayList<ArrayList<Integer>> result=new ArrayList();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<Integer> curArryList=new ArrayList();
fun(curArryList,root,target);
return result;
}
public void fun(ArrayList<Integer> curArrayList,TreeNode root,int target){
if(root==null){
return;
}
//如果该节点为叶子节点
if(root.left==null&&root.right==null&&root!=null){
//如果可达
if(target-root.val==0){
ArrayList mycur=new ArrayList();
for (Integer x:curArrayList) {
mycur.add(x);
}
mycur.add(root.val);
target-=root.val;
result.add(mycur);
System.out.println("收入:"+root.val+" 新目标:"+target+" 路径:"+mycur+" 路径集:"+result);
return;
}
}
//如果不是叶子节点
else{
//curArrayList.add(root.val);
//target=target-root.val;
//不可达
if(target-root.val<=0){
return;
}
//可以走
else{
ArrayList mycur=new ArrayList();
for (Integer x:curArrayList) {
mycur.add(x);
}
mycur.add(root.val);
target=target-root.val;
//System.out.println("收入:"+root.val+" 新目标:"+target+" 路径:"+curArrayList);
//把当前路径和新的目标值传给下一个节点
fun(mycur,root.left,target);
fun(mycur,root.right,target);
}
}
}
}