剑指Offer23题:
package Offer;
import java.util.ArrayList;
public class Offer23_FindPath {
ArrayList<Integer> list = new ArrayList<>();
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
public static void main(String[] args){
TreeNode t1 = new TreeNode(10);
TreeNode t2 = new TreeNode(5);
TreeNode t3 = new TreeNode(12);
TreeNode t4 = new TreeNode(4);
TreeNode t5 = new TreeNode(7);
t1.addLeft(t1,t2);
t1.addRight(t1,t3);
t2.addLeft(t2,t4);
t2.addRight(t2,t5);
Offer23_FindPath o1 = new Offer23_FindPath();
o1.FindPath(t1,22);
}
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
if (root==null){
return result;
}
list.add(root.val);
target-=root.val;
if (target==0 && root.right==null && root.left==null){
result.add(new ArrayList<Integer>(list));
// result.add(list);
}
FindPath(root.left,target);
FindPath(root.right,target);
list.remove(list.size()-1);
return result;
}
}
对于以下这两句代码:
result.add(new ArrayList<Integer>(list));
result.add(list);
第一种写法,在堆中新建了一个新的ArrayList,原来的list中的值改变后,result中的值不变。
第二种写法,原来的list中的值改变后,result中的值也会改变。