129,求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
例如,从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。
示例 1:
输入: [1,2,3] 1 / \ 2 3 输出: 25 解释: 从根到叶子节点路径 1->2 代表数字 12. 从根到叶子节点路径 1->3 代表数字 13. 因此,数字总和 = 12 + 13 = 25.
示例 2:
输入: [4,9,0,5,1] 4 / \ 9 0 / \ 5 1 输出: 1026 解释: 从根到叶子节点路径 4->9->5 代表数字 495. 从根到叶子节点路径 4->9->1 代表数字 491. 从根到叶子节点路径 4->0 代表数字 40. 因此,数字总和 = 495 + 491 + 40 = 1026.
回溯算法:http://timd.cn/data-structure/backtrace/
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def _generate_number(self, lst): res = 0 for n in lst: res = res * 10 + n.val return res def sumNumbers(self, root): """ :type root: TreeNode :rtype: int """ if root is None: return 0 status = {} stack = [root] res = 0 while stack: top = stack[-1] # top is leaf if top.left is None and top.right is None: res = res + self._generate_number(stack) stack.pop(-1) status.pop(top, None) continue if top not in status: status[top] = 0 if status[top] > 1: stack.pop(-1) status.pop(top, None) continue if status[top] == 0: next = top.left else: next = top.right status[top] = status[top] + 1 if next is None: continue stack.append(next) return res