题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路
这道题有好几个需要注意的细节。对递归的理解还是蛮重要的。
public class Solution {
ArrayList<ArrayList<Integer>> listall=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> list=new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root==null)
return listall;
target=target-root.val;
list.add(root.val);
if(target==0 && root.left==null && root.right==null)
listall.add(new ArrayList<Integer>(list));//这里需要重新new一个list,因为原来的list里的值会一直变动。
FindPath(root.left,target);
FindPath(root.right,target);
list.remove(list.size()-1);//这行代码的作用是递归到叶子节点如果还没有找到路径,就要回退到父节点继续寻找。targrt在递归中就是他所在那层的值,下一层递归所改变的值不会递归到上一层。所以target的值不需要恢复。
return listall;
}
}