给定一个二叉树和一个值\ sum sum,请找出所有的根节点到叶子节点的节点值之和等于\ sum sum 的路径,
例如:
给出如下的二叉树, sum=22
返回
[
[5,4,11,2],
[5,8,9]
]
public class pathSum {
int sum = -1;
public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
if(root == null){
return new ArrayList<ArrayList<Integer>>();
}
this.sum = sum;
sum(root,0);
return list;
}
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> tmp = new ArrayList<Integer>();
private void sum(TreeNode root, int sum){
if(root == null){
return ;
}
tmp.add(root.val);
sum = sum + root.val;
if(this.sum == sum && tmp.size() != 0 && root.left == null && root.right == null){
list.add(new ArrayList<Integer>(tmp));
}
if(root.left != null){
sum( root.left, sum);
}
if(root.right != null){
sum( root.right, sum);
}
tmp.remove(tmp.size()-1);
}
}