输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
构建一个新的ArrayList<Integer>放入,如果把arr直接放入,后面修改
//修改arr,会改变已经放入ArrayList的arr的数值。
arr.remove(arr.size()-1);// 弹出最后一个,为下一个子节点加入做准备
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 { public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) { ArrayList<Integer> arr = new ArrayList<Integer>(); ArrayList<ArrayList<Integer>> arrayList = new ArrayList<ArrayList<Integer>>(); if(root==null)return arrayList; findYezi(root, arr, arrayList,target); return arrayList; } public void findYezi(TreeNode node,ArrayList<Integer> arr,ArrayList<ArrayList<Integer>> arrayList,int target){ if(isyezi(node)){ int last=node.val; int sum=0; for(int i=0;i<arr.size();i++){ sum+=arr.get(i); } sum=sum+last; if(sum==target){ arr.add(last); arrayList.add(new ArrayList<Integer>(arr));//构建一个新的ArrayList<Integer>放入,如果把arr直接放入,后面修改 //修改arr,会改变已经放入ArrayList的arr的数值。 arr.remove(arr.size()-1);//弹出最后一个,为下一个子节点加入做准备 } return ; } //ArrayList<ArrayList<Integer>> arrayList1 = new ArrayList<ArrayList<Integer>>(); //ArrayList<ArrayList<Integer>> arrayList2 = new ArrayList<ArrayList<Integer>>(); arr.add(node.val); if(node.left!=null){ findYezi(node.left, arr, arrayList,target); } if(node.right!=null){ findYezi(node.right, arr, arrayList,target); } arr.remove(arr.size()-1);//弹出最后一个,为下一个子节点加入做准备 /*for(int k=0;k<arrayList2.size();k++){ arrayList.add(arrayList2.get(k)); } for(int k=0;k<arrayList1.size();k++){ arrayList.add(arrayList2.get(k)); }*/ // return arrayList; } public boolean isyezi(TreeNode node){ if(node.left==null&&node.right==null)return true; return false; } }