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