129.Sum Root to Leaf Numbers
===
###### tags: `Medium`,`Tree`,`DFS`
[129. Sum Root to Leaf Numbers](https://leetcode.com/problems/sum-root-to-leaf-numbers/)
### 題目描述
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.
* For example, the root-to-leaf path 1 -> 2 -> 3 represents the number 123.
Return *the total sum of all root-to-leaf numbers. Test cases are generated so that the answer will fit in a **32-bit** integer.*
A **leaf** node is a node with no children.
### 範例
**Example 1:**
![](https://assets.leetcode.com/uploads/2021/02/19/num1tree.jpg)
```
Input: root = [1,2,3]
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.
```
**Example 2:**
![](https://assets.leetcode.com/uploads/2021/02/19/num2tree.jpg)
```
Input: root = [4,9,0,5,1]
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.
```
**Constraints**:
* The number of nodes in the tree is in the range `[1, 1000]`.
* 0 <=` Node.val` <= 9
* The depth of the tree will not exceed `10`.
### 解答
#### Python
```python=
class Solution:
def sumNumbers(self, root: Optional[TreeNode]) -> int:
nums = []
def dfs(root, num=None):
if not root: return
if not num: num = []
num.append(str(root.val))
if not root.left and not root.right:
num_str = "".join(num)
nums.append(int(num_str))
dfs(root.left, num)
dfs(root.right, num)
num.pop()
dfs(root)
return sum(nums)
```
> [name=Ron Chen][time=Tue, Mar 14, 2023]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)