又一道DFS题,题意如下:
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
For example:Given the below binary tree and
sum = 22
,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
return
[ [5,4,11,2], [5,8,4,5] ]非常容易,跟之前的打印所有路径是一样的,直接上代码:
static List<List<Integer>> result;
static List<Integer> current;
public static List<List<Integer>> pathSum(TreeNode root, int sum) {
result = new ArrayList<List<Integer>>();
current = new ArrayList<Integer>();
s(root,sum);
return result;
}
static void s(TreeNode root,int sum){
if(root == null){
return;
}else if(root.left == null && root.right == null){
current.add(root.val);
int temp = 0;
for(int i=0;i<current.size();i++)
{
temp+=(int)current.get(i);
}
if(temp == sum){
List<Integer> ct = new ArrayList<Integer>(current);
result.add(ct);
}
current.remove(current.size()-1);
return ;
}
current.add(root.val);
s(root.left,sum);
s(root.right,sum);
current.remove(current.size()-1);
return;
}
不过也有一个小细节需要注意,就是在给result做add方法的时候,不可以用静态变量的引用去添加,只要没有new一个新的对象,所有的引用都指向原来的一份拷贝,所以一旦修改,result里的也会变,所以需要每一次都new一个新的一维list去添加到result。