Problem
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.
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.
Algorithm
Recursion.
Code
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sumNumbers(self, root: Optional[TreeNode]) -> int:
ans = 0
def dfs(root, now):
nonlocal ans
if not root:
return
elif not root.right and not root.left:
ans += now * 10 + root.val
elif not root.right:
dfs(root.left, now*10 + root.val)
elif not root.left:
dfs(root.right, now*10 + root.val)
else:
dfs(root.left, now*10 + root.val)
dfs(root.right, now*10 + root.val)
dfs(root, 0)
return ans