Sum root to leaf path

129.Sum Root to Leaf Numbers

Tree
Recursion

Problem Statement:

You are given the root of a binary tree containing digits from 0 to 9 only. Each root-to-leaf path in the tree represents a number. Return the total sum of all root-to-leaf numbers.

Example:

Input:

root = [1,2,3]

Output:

25 (12 + 13)

Java Solution:

public int sumNumbers(TreeNode root) {
    return recurse(root, 0);
}

// Remember answer bubbles up so only add sum to return value with both 
// nodes are null
int recurse(TreeNode node, int sum) {
    if (node == null) return 0;

    sum = sum * 10 + node.val;  // Build number by multiplying by 10 and adding current digit
    
    if (node.right == null && node.left == null)  // Leaf node
        return sum;
    
    return recurse(node.left, sum) + recurse(node.right, sum);  // Sum both paths
}

Python Solution:

def sumNumbers(self, root: TreeNode) -> int:
    def recurse(node: TreeNode, curr_sum: int) -> int:
        if not node:
            return 0
            
        curr_sum = curr_sum * 10 + node.val
        
        if not node.left and not node.right:
            return curr_sum
            
        return recurse(node.left, curr_sum) + recurse(node.right, curr_sum)
    
    return recurse(root, 0)

C++ Solution:

class Solution {
public:
    int sumNumbers(TreeNode* root) {
        return recurse(root, 0);
    }
    
private:
    int recurse(TreeNode* node, int sum) {
        if(!node) return 0;
        
        sum = sum * 10 + node->val;
        
        if(!node->left && !node->right)
            return sum;
            
        return recurse(node->left, sum) + recurse(node->right, sum);
    }
};

Complexity:

Time: O(N) | Space: O(H) where H is tree height

Previous
Previous

Minimum Add to make parentehses valid

Next
Next

Buildings with Ocean view