注意遞歸出口:root爲null或者左右節點訪問完,返回
返回時要注意把path的最後一個數據remove
注意:不能把path直接add到res中。否則更改path的時候。res中的path也會隨之而改變。這就是因爲res中存的時path的引用,path發生改變時,res中的存儲的值會發生相應改變
代碼:
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 {
ArrayList<Integer> path =new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> res=new ArrayList<ArrayList<Integer>>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
//int sum=0;
if(root==null){
return res;
}
path.add(root.val);
//sum+=root.val;
if(root.val==target&&root.right==null&&root.left==null){
res.add(new ArrayList<Integer>(path));
}
FindPath(root.left,target-root.val);
FindPath(root.right,target-root.val);
path.remove(path.size()-1);
return res;
}
}