Bird
Raised Fist0
DSA C#programming

Path Sum Root to Leaf in Binary Tree in DSA C#

Choose your learning style10 modes available
Mental Model
We want to check if there is a path from the top of the tree to any bottom leaf where the numbers add up to a target sum.
Analogy: Imagine walking from the entrance of a maze to any exit, adding numbers on the path. We want to see if any exit path adds up to a specific number.
      5
     / \
    4   8
   /   / \
  11  13  4
 /  \      \
7    2      1
Dry Run Walkthrough
Input: tree: 5->4->11->7 (leftmost path), target sum = 22
Goal: Find if any root-to-leaf path sums to 22
Step 1: start at root node 5, current sum = 22 - 5 = 17
5 (sum left:17) -> 4 -> 8 -> null
Why: We subtract root value from target to track remaining sum needed
Step 2: move to left child 4, current sum = 17 - 4 = 13
5 -> 4 (sum left:13) -> 11 -> null
Why: Continue subtracting node values along the path
Step 3: move to left child 11, current sum = 13 - 11 = 2
5 -> 4 -> 11 (sum left:2) -> null
Why: Keep updating remaining sum as we go deeper
Step 4: move to left child 7, current sum = 2 - 7 = -5
5 -> 4 -> 11 -> 7 (sum left:-5)
Why: Reached leaf, sum left is not zero, so path invalid
Step 5: backtrack and move to right child 2 of 11, current sum = 2 - 2 = 0
5 -> 4 -> 11 -> 2 (sum left:0)
Why: Reached leaf with sum left zero, path found
Result:
5 -> 4 -> 11 -> 2 -> null (path sum equals 22) -> true
Annotated Code
DSA C#
using System;

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 {
    public bool HasPathSum(TreeNode root, int targetSum) {
        if (root == null) return false; // no node means no path
        if (root.left == null && root.right == null) {
            return targetSum == root.val; // leaf check if sum matches
        }
        // check left and right subtrees with reduced sum
        return HasPathSum(root.left, targetSum - root.val) || HasPathSum(root.right, targetSum - root.val);
    }

    public static void Main() {
        TreeNode root = new TreeNode(5,
            new TreeNode(4,
                new TreeNode(11,
                    new TreeNode(7),
                    new TreeNode(2)
                ),
                null
            ),
            new TreeNode(8,
                new TreeNode(13),
                new TreeNode(4,
                    null,
                    new TreeNode(1)
                )
            )
        );
        Solution sol = new Solution();
        bool result = sol.HasPathSum(root, 22);
        Console.WriteLine(result);
    }
}
if (root == null) return false; // no node means no path
handle empty subtree as no path
if (root.left == null && root.right == null) { return targetSum == root.val; // leaf check if sum matches }
check if current node is leaf and sum matches target
return HasPathSum(root.left, targetSum - root.val) || HasPathSum(root.right, targetSum - root.val);
recurse left and right with reduced sum, return true if any path matches
OutputSuccess
True
Complexity Analysis
Time: O(n) because we visit each node once to check paths
Space: O(h) where h is tree height due to recursion stack
vs Alternative: Compared to iterative BFS, recursion is simpler but uses call stack; BFS uses queue and may use more memory
Edge Cases
empty tree
returns false because no paths exist
DSA C#
if (root == null) return false; // no node means no path
single node tree where node value equals target sum
returns true because root is leaf and sum matches
DSA C#
if (root.left == null && root.right == null) { return targetSum == root.val; }
single node tree where node value does not equal target sum
returns false because sum does not match leaf value
DSA C#
if (root.left == null && root.right == null) { return targetSum == root.val; }
When to Use This Pattern
When asked if a root-to-leaf path sums to a target, use a depth-first search subtracting node values along the path to check sums.
Common Mistakes
Mistake: Checking sum only at root or not verifying leaf nodes specifically
Fix: Ensure to check sum only when reaching leaf nodes (no children)
Mistake: Not subtracting current node value from target sum before recursive calls
Fix: Subtract current node's value from target sum before passing to children
Summary
Checks if any path from root to leaf adds up to a target sum.
Use when you need to verify if a specific sum exists along any root-to-leaf path in a binary tree.
The key is to subtract node values as you go down and check sum only at leaf nodes.

Practice

(1/5)
1. What does the "Path Sum Root to Leaf" problem ask you to find in a binary tree?
easy
A. The total number of nodes in the binary tree
B. The maximum depth of the binary tree
C. If there exists a root-to-leaf path with a sum equal to a given target
D. The sum of all node values in the binary tree

Solution

  1. Step 1: Understand the problem statement

    The problem asks to check if any path from the root node down to any leaf node sums up exactly to a given target value.
  2. Step 2: Identify what is being checked

    We are not asked for maximum depth, total nodes, or sum of all nodes, but specifically for a path sum equal to the target.
  3. Final Answer:

    If there exists a root-to-leaf path with a sum equal to a given target -> Option C
  4. Quick Check:

    Path sum check = If there exists a root-to-leaf path with a sum equal to a given target [OK]
Hint: Look for a path from root to leaf matching target sum [OK]
Common Mistakes:
  • Confusing path sum with total tree sum
  • Checking any path, not just root-to-leaf
  • Looking for maximum depth instead
2. Which of the following C# method signatures correctly represents a function to check path sum in a binary tree node class?
easy
A. public bool HasPathSum(TreeNode root, int targetSum)
B. public int HasPathSum(TreeNode root, int targetSum)
C. public void HasPathSum(TreeNode root, int targetSum)
D. public string HasPathSum(TreeNode root, int targetSum)

Solution

  1. Step 1: Determine the return type for path sum check

    The function should return true or false indicating if such a path exists, so return type must be bool.
  2. Step 2: Check method signature correctness

    public bool HasPathSum(TreeNode root, int targetSum) returns bool and takes root node and target sum as parameters, matching the problem requirements.
  3. Final Answer:

    public bool HasPathSum(TreeNode root, int targetSum) -> Option A
  4. Quick Check:

    Return type bool for yes/no check = public bool HasPathSum(TreeNode root, int targetSum) [OK]
Hint: Return bool for yes/no path sum check [OK]
Common Mistakes:
  • Using int or void return type instead of bool
  • Returning string instead of boolean
  • Incorrect parameter types or order
3. Given the following binary tree and targetSum = 22, what will the method HasPathSum(root, 22) return?
    5
   / \
  4   8
 /   / \
11  13  4
/  \      
7    2      1
medium
A. Runtime error
B. true
C. null
D. false

Solution

  1. Step 1: Identify root-to-leaf paths and their sums

    Check paths: 5->4->11->7 = 27, 5->4->11->2 = 22, 5->8->13 = 26, 5->8->4->1 = 18.
  2. Step 2: Check if any path sum equals 22

    Path 5->4->11->2 sums to 22, so the method returns true.
  3. Final Answer:

    true -> Option B
  4. Quick Check:

    Path sum 22 exists = true [OK]
Hint: Sum each root-to-leaf path to find target [OK]
Common Mistakes:
  • Ignoring leaf node condition
  • Summing partial paths not ending at leaf
  • Miscomputing sums of nodes
4. The following C# code attempts to check path sum but has a bug. What is the error?
public bool HasPathSum(TreeNode root, int targetSum) {
    if (root == null) return false;
    if (root.left == null && root.right == null) return root.val == targetSum;
    return HasPathSum(root.left, targetSum - root.val) || HasPathSum(root.right, targetSum - root.val);
}
medium
A. No bug; code works correctly
B. Should check for null root after subtracting value
C. Incorrect base case for leaf node check
D. Missing return statement in recursive calls

Solution

  1. Step 1: Analyze base cases and recursion

    Code returns false if root is null, correctly handles leaf node by comparing value to targetSum, and recursively checks left and right subtrees with updated targetSum.
  2. Step 2: Confirm correctness of logic

    All conditions and recursive calls are correct and return statements are present.
  3. Final Answer:

    No bug; code works correctly -> Option A
  4. Quick Check:

    Code logic matches problem requirements = No bug; code works correctly [OK]
Hint: Check base cases and recursive returns carefully [OK]
Common Mistakes:
  • Forgetting to subtract node value from targetSum
  • Missing return keyword in recursion
  • Incorrect leaf node condition
5. You want to find all root-to-leaf paths in a binary tree where the sum of node values equals a target sum. Which approach best extends the path sum check to collect all such paths?
hard
A. Sum all nodes and compare to target sum once traversal ends
B. Use BFS and stop at first path matching the sum
C. Use recursion without tracking path, just return true/false
D. Use DFS with a list to track current path and add to result when sum matches at leaf

Solution

  1. Step 1: Understand the requirement to collect all paths

    We need to find all root-to-leaf paths with sum equal to target, so we must track the current path during traversal.
  2. Step 2: Choose the correct traversal and tracking method

    DFS with a list to store nodes along the current path allows backtracking and collecting all valid paths when leaf and sum conditions are met.
  3. Final Answer:

    Use DFS with a list to track current path and add to result when sum matches at leaf -> Option D
  4. Quick Check:

    Track paths with DFS and list = Use DFS with a list to track current path and add to result when sum matches at leaf [OK]
Hint: Track path nodes during DFS to collect all valid paths [OK]
Common Mistakes:
  • Using BFS which is less natural for path tracking
  • Not tracking path nodes, only sums
  • Stopping at first found path instead of all
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard