public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
dfs(res, new ArrayList<Integer>(), sum, 0, root);
return res;
}
public void dfs(List<List<Integer>> res, List<Integer> temp, int target, int count, TreeNode node){
if (node == null)
return;
temp.add(node.val);
if (node.left == null && node.right == null && count + node.val == target) {
res.add(new ArrayList<Integer>(temp));
}
dfs(res, temp, target, count + node.val, node.left);
dfs(res, temp, target, count + node.val, node.right);
temp.remove(temp.size()-1);
}