问题描述:
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] ]
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public List<List<Integer>> pathSum(TreeNode root, int sum) {
if(root == null)
return new ArrayList();
List<List<Integer>> result = new LinkedList<List<Integer>>();
List<Integer> list = new LinkedList<Integer>();
getPathNum(root, sum,list,result);
return result;
}
public void getPathNum(TreeNode root, int sum,List<Integer> list,List<List<Integer>> result){
if(root.left == null && root.right ==null){
if(sum == root.val){
List<Integer> tmp = new LinkedList<Integer>(list);
tmp.add(root.val);
result.add(tmp);
return;
}
else return;
}
list.add(root.val);
List<Integer> ltmp = new LinkedList<Integer>(list);
List<Integer> rtmp = new LinkedList<Integer>(list);
if(root.left !=null)
getPathNum(root.left, sum-root.val,ltmp,result);
if(root.right !=null)
getPathNum(root.right, sum-root.val,rtmp, result);
}