Description
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,
1 2 3 4 5 6 7
| 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
|
Return:
1 2 3 4
| [ [5,4,11,2], [5,8,4,5] ]
|
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
class Solution { public List<List<Integer>> pathSum(TreeNode root, int sum) { List<List<Integer>> res = new ArrayList<>(); if (root == null) return res; helper(root, sum, res, new ArrayList<Integer>(), 0); return res; } private void helper(TreeNode node, int target, List<List<Integer>> res, List<Integer> cur, int sum){ cur.add(node.val); sum += node.val; if (node.left == null && node.right == null && sum == target){ res.add(new ArrayList<>(cur)); return; } if (node.left != null){ helper(node.left, target, res, cur, sum); cur.remove(cur.size()-1); } if (node.right != null){ helper(node.right, target, res, cur, sum); cur.remove(cur.size()-1); } } }
|