<gh_stars>0
"""
Method 1: dfs
"""
def sumNumbers(self, root):
    if not root: return 0
    stack, res = [(root, root.val)], 0
    while stack:
        node, value = stack.pop()
        if not node.left and not node.right:
            res += value
        if node.right:
            stack.append((node.right, value * 10 + node.right.val))
        if node.left:
            stack.append((node.left, value * 10 + node.left.val))
    return res
    
    
    
"""
Method 2: recursive solution
"""
def sumNumbers(self, root):
    return self.helper(root, 0)

def helper(self, node, s):
    if not node: return 0
    if not node.left and not node.right: return s * 10 + node.val
    return self.helper(node.left, s * 10 + node.val) + \
            self.helper(node.right, s * 10 + node.val)
"""
Method 1: dfs
"""
def sumNumbers(self, root):
    if not root: return 0
    stack, res = [(root, root.val)], 0
    while stack:
        node, value = stack.pop()
        if not node.left and not node.right:
            res += value
        if node.right:
            stack.append((node.right, value * 10 + node.right.val))
        if node.left:
            stack.append((node.left, value * 10 + node.left.val))
    return res
    
    
    
"""
Method 2: recursive solution
"""
def sumNumbers(self, root):
    return self.helper(root, 0)

def helper(self, node, s):
    if not node: return 0
    if not node.left and not node.right: return s * 10 + node.val
    return self.helper(node.left, s * 10 + node.val) + \
            self.helper(node.right, s * 10 + node.val)
Method 1: dfs Method 2: recursive solution