代码改变世界

[LeetCode] 129. Sum Root to Leaf Numbers_Medium tag: DFS

2018-08-08 00:40  Johnson_强生仔仔  阅读(281)  评论(0编辑  收藏  举报

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.

Example:

Input: [1,2,3]
    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:

Input: [4,9,0,5,1]
    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.

思路就是DFS, 然后将node 和当前的path组成的数字string一起append进入stack, 判断如果是leaf, 将num转换为int加入在ans中.

1. Constraints
1)None => 0

2. Ideas
DFS T: O(n) S; O(n)

3. Code
class Solution:
    def sumRootLeaf(self, root):
        if not root: return 0
        stack, ans = [(root, str(root.val))], 0
        while stack:
            node, num = stack.pop()
            if not node.right and not node.left:
                ans += int(num)
            if node.left:
                stack.append((node.left, num + str(node.left.val)))
            if node.right:
                stack.append((node.right, num + str(node.right.val)))
        return ans