LC 113. Path Sum II

Alen Alex · February 7, 2024

LeetCode Link: 113. Path Sum II
Language: C#

Problem Statement

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.

Examples

Example 1:

img1
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:

img1
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

Solution

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left;
 *     public TreeNode right;
 *     public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
public class Solution 
{
    List<IList<int>> list = new List<IList<int>>();
    public IList<IList<int>> PathSum(TreeNode root, int targetSum) 
    {
        var path = new List<TreeNode>();
        HasSum(root, targetSum, 0, path);
        return list;
    }

    private void HasSum(TreeNode root, int target, int sum, List<TreeNode> path)
    {
        if (root is null)
        {
            return;
        }

        sum += root.val;
        path.Add(root);

        if (root.left is null && root.right is null && sum == target)
        {
            var l = new List<int>();
            foreach (var node in path)
            {
                l.Add(node.val);
            }

            list.Add(l);
        }

        HasSum(root.left, target, sum, path);
        HasSum(root.right, target, sum, path);
        path.Remove(root);
    }
}

Complexity

Time Complexity: O(N)
Space Complexity: O(N)

Twitter, Facebook