Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
Note: A leaf is a node with no children.
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] ]
1 class Solution { 2 public List<List<Integer>> pathSum(TreeNode root, int sum) { 3 List<List<Integer>> res = new ArrayList(); 4 List<Integer> cur = new ArrayList(); 5 help(root, sum, res, cur); 6 return res; 7 } 8 private void help(TreeNode root, int sum, List<List<Integer>> res,List<Integer> cur){ 9 if(root == null) return; 10 cur.add(root.val); 11 //到达叶子节点 12 if(root.left == null && root.right == null){ 13 if(sum == root.val) res.add(new ArrayList(cur));//务必new一个arraylist,否则会修改之前的 14 } 15 //继续递归 16 help(root.left, sum - root.val, res, cur); 17 help(root.right, sum - root.val, res, cur); 18 //表明无论成功与否,此node的使命已经完成,remove以为后续节点留空间 19 cur.remove(cur.size() - 1); 20 } 21 }
和path sum一方法类似,都是减到最后比较root和剩下的值,相等就说明这一组成功,区别是要用一个current的list存放cur结果,如果此数已经被计算过,在最后要进行删除。