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); } } } }