LeetCode

Path Sum II

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] ]

Java

public class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        List<List<Integer>> sols = new ArrayList<List<Integer>>();
        List<Integer> sol = new ArrayList<Integer>();
        pathSum(root, sum, sol, sols);
        return sols;
    }

    private void pathSum(TreeNode root, int sum, List<Integer> sol, List<List<Integer>> sols) {
        if(root == null) {
            return;
        }

        sol.add(root.val);
        sum -= root.val;

        if(sum == 0 && root.left == null && root.right == null) {
            sols.add(new ArrayList<Integer>(sol));
        } else {
            pathSum(root.left, sum, sol, sols);
            pathSum(root.right, sum, sol, sols);
        }
        sol.remove(sol.size() - 1);
    }
}