题目描述
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
解题思路
代码
public class FindPathWithSum {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
int curSum = 0;
public ArrayList<ArrayList<Integer>> FindPath(TreeNode<Integer> root,int target) {
if(root==null) return res;
ArrayList<Integer> path = new ArrayList<Integer>();
travel(root, target, path);
return res;
}
public void travel(TreeNode<Integer> node,int target, ArrayList<Integer> path){
curSum += node.val;
path.add(node.val);
boolean isLeaf = node.left==null && node.right==null;
if(isLeaf && curSum==target){
res.add(new ArrayList<Integer>(path));
}
if(node.left != null){
travel(node.left, target, path);
}
if(node.right != null){
travel(node.right, target, path);
}
curSum -= node.val;
path.remove(path.size()-1);
}
}