Path Sum II

Given the root of a binary tree and an integer targetSum, return all root-to-leaf paths where the sum of the node values in the path equals targetSum. Each path should be returned as a list of the node values, not node references.


A root-to-leaf path is a path starting from the root and ending at any leaf node. A leaf is a node with no children.


 


Example 1:



Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22

Output: [[5,4,11,2],[5,8,4,5]]

Explanation: There are two paths whose sum equals targetSum:

5 + 4 + 11 + 2 = 22

5 + 8 + 4 + 5 = 22

Example 2:



Input: root = [1,2,3], targetSum = 5

Output: []

Example 3:


Input: root = [1,2], targetSum = 0

Output: []

 


Constraints:


The number of nodes in the tree is in the range [0, 5000].

-1000 <= Node.val <= 1000

-1000 <= targetSum <= 1000

Approach: DFS + Backtracking

🔸 Idea:

  • Use DFS to traverse all paths from root to leaf.

  • Maintain a current path (List<Integer>) and current sum.

  • If at a leaf and the sum equals targetSum, add the path to result.

  • Use backtracking to remove the last node when returning up the tree.


class Solution {
    public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        List<List<Integer>> result = new ArrayList<>();
        List<Integer> path = new ArrayList<>();
        dfs(root, targetSum, path, result);
        return result;
    }

    private void dfs(TreeNode node, int target, List<Integer> path, List<List<Integer>> result) {
        if (node == null) return;

        // Add current node to the path
        path.add(node.val);

        // Check if it's a leaf and sum matches
        if (node.left == null && node.right == null && node.val == target) {
            // Add a copy of path to result
            result.add(new ArrayList<>(path));
        } else {
            // Continue DFS
            dfs(node.left, target - node.val, path, result);
            dfs(node.right, target - node.val, path, result);
        }

        // Backtrack (remove last node before going back)
        path.remove(path.size() - 1);
    }
}

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence