输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
深度优先搜索,前序遍历递去整个二叉树,直到叶子结点,此时归来计算路径总和是否等于target,若相等,则在总集合创建一个新的小集合用来存放此路径,若不等,回退至上一结点继续向下搜索。
public class Solution {
public ArrayList<ArrayList<Integer>> Alllist = new ArrayList<ArrayList<Integer>>();
public ArrayList<Integer> list = new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root == null)return Alllist;
list.add(root.val);
target -= root.val;
if((target == 0)&&(root.left == null)&&(root.right == null)){
Alllist.add(new ArrayList<Integer>(list));
}
FindPath(root.left,target);
FindPath(root.right,target);
list.remove(list.size()-1);//回到本结点的上一结点。
return Alllist;
}
}