# 129. Sum Root to Leaf Numbers

### Description

Given a binary tree containing digits from `0-9` only, each root-to-leaf path could represent a number.

An example is the root-to-leaf path `1->2->3` which represents the number `123`.

Find the total sum of all root-to-leaf numbers.

**Note:** A leaf is a node with no children.

### Constraints

### Approach

### Links

* [GeeksforGeeks](https://www.geeksforgeeks.org/sum-numbers-formed-root-leaf-paths/)
* [Leetcode](https://leetcode.com/problems/sum-root-to-leaf-numbers/)
* [ProgramCreek](https://www.programcreek.com/2014/05/leetcode-sum-root-to-leaf-numbers-java/)
* YouTube

### **Examples**

{% tabs %}
{% tab title="Example 1" %}
**Input:** \[1, 2, 3]

<div align="left"><img src="https://1091135627-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEmU-aGQcUvtjjAH8_3%2F-MGOFSrzHBZ31Q-ogMwL%2F-MGOIOOgsQ3lHSy8POAg%2Fimage.png?alt=media&#x26;token=0bad258b-281b-40de-a024-0f681dfacd6b" alt=""></div>

**Output:** 25

**Explanation:**

The root-to-leaf path 1->2 represents the number 12.

The root-to-leaf path 1->3 represents the number 13.

Therefore, sum = 12 + 13 = 25.
{% endtab %}

{% tab title="Example 2" %}
**Input:** \[4, 9, 0, 5, 1]

<div align="left"><img src="https://1091135627-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEmU-aGQcUvtjjAH8_3%2F-MGOFSrzHBZ31Q-ogMwL%2F-MGOIBcvi99zsQ4Hsu2W%2Fimage.png?alt=media&#x26;token=fffeaf5c-0ccd-44d0-aaef-c6b8784a2dfd" alt=""></div>

**Output:** 1026

**Explanation:**

The root-to-leaf path 4->9->5 represents the number 495.

The root-to-leaf path 4->9->1 represents the number 491.

The root-to-leaf path 4->0 represents the number 40.

Therefore, sum = 495 + 491 + 40 = 1026.
{% endtab %}
{% endtabs %}

### **Solutions**

{% tabs %}
{% tab title="TreeNode" %}

```java
// Definition for a binary tree node.
public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    
    TreeNode() {}
    
    TreeNode(int val) { this.val = val; }
    
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
```

{% endtab %}

{% tab title="Solution 1" %}

```java
/**
 * Time complexity : 
 * Space complexity : 
 */

class Solution {
    private int sum = 0;
    
    public int sumNumbers(TreeNode root) {
        if(root == null) return sum;
        helper(root, root.val);
        return sum;
    }
    
    private void helper(TreeNode root, int pathSum) {
        if(root == null) return;
        
        if(root.left == null && root.right == null) {
            sum += pathSum;
            return;
        }

        if(root.left != null) {
            helper(root.left, pathSum*10+root.left.val);
        }
        
        if(root.right != null) {
            helper(root.right, pathSum*10+root.right.val);
        }
    }
}
```

{% endtab %}

{% tab title="Solution 2" %}

```java
/**
 * Time complexity : 
 * Space complexity : 
 */

class Solution {
    public int sumNumbers(TreeNode root) {
        if(root == null) return 0;
        return helper(root, 0);
    }
    
    private int helper(TreeNode node, int sum) {
        if(node == null) return 0;

        sum = (sum * 10) + node.val;
        
        if(node.left == null && node.right == null) {
            return sum;
        }

        return helper(node.left, sum) + 
                helper(node.right, sum);
    }
}
```

{% endtab %}
{% endtabs %}

### **Follow up**

*
