Difficulty:: Medium
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,
| 12
 3
 4
 5
 6
 7
 
 |       5/ \
 4   8
 /   / \
 11  13  4
 /  \    / \
 7    2  5   1
 
 | 
Return:
| 12
 3
 4
 
 | [[5,4,11,2],
 [5,8,4,5]
 ]
 
 | 
Solution
Language: Java
| 12
 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
 36
 37
 38
 
 | 
 
 
 
 
 
 
 
 class Solution {
 public List<List<Integer>> pathSum(TreeNode root, int sum) {
 List<List<Integer>> result = new ArrayList<>();
 if (root == null) {
 return result;
 }
 List<Integer> path = new ArrayList<>();
 path.add(root.val);
 pathHelper(root, sum - root.val, path, result);
 return result;
 }
 
 private void pathHelper(TreeNode root, int sum, List<Integer> path, List<List<Integer>> result) {
 if (root.left == null && root.right == null && sum == 0) {
 result.add(new ArrayList<>(path));
 }
 if (root.left != null) {
 path.add(root.left.val);
 pathHelper(root.left, sum - root.left.val, path, result);
 path.remove(path.size() - 1);
 }
 if (root.right != null) {
 path.add(root.right.val);
 pathHelper(root.right, sum - root.right.val, path, result);
 path.remove(path.size() - 1);
 }
 
 }
 }
 
 | 
| 12
 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
 
 | 
 
 
 
 
 
 
 
 class Solution {
 public List<List<Integer>> pathSum(TreeNode root, int sum) {
 List<List<Integer>> result = new ArrayList<>();
 dfsHelper(root, sum, result, new ArrayList<>());
 return result;
 }
 
 private void dfsHelper(TreeNode root, int sum, List<List<Integer>> result, List<Integer> one) {
 if (root == null) {
 return;
 }
 one.add(root.val);
 if (root.left == null && root.right == null && sum == root.val) {
 result.add(new ArrayList<>(one));
 one.remove(one.size() - 1);
 return;
 }
 dfsHelper(root.left, sum - root.val, result, one);
 dfsHelper(root.right, sum - root.val, result, one);
 one.remove(one.size() - 1);
 }
 }
 
 |