[LeetCode]129. Sum Root to Leaf Numbers

129. Sum Root to Leaf Numbers

题意:计算所有从跟结点到叶结点路径的值的和

DFS

思路:将所有递归到叶结点路径的值累加

class Solution(object):
    res = 0
    def sumNumbers(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        def dfs(node, path):
            if not node.left and not node.right:
                self.res += int(path + str(node.val))
                return
            if node.left:
                dfs(node.left, path + str(node.val))
            if node.right:
                dfs(node.right, path + str(node.val))
        if not root:
            return 0
        dfs(root, '')
        return self.res

BFS

还有一种层次遍历的做法,就是保存到达上一层结点的值,如果存在下一层则将上一层的值乘以10,然后加上当前结点的值,如下:

class Solution(object):
    res = 0
    def sumNumbers(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        queue = [(root, 0)]
        while queue:
            node, val = queue.pop(0)
            cur = val * 10 + node.val
            if node.left:
                queue.append((node.left, cur))
            if node.right:
                queue.append((node.right, cur))
            if not node.left and not node.right:
                self.res += cur
        return self.res
posted @ 2017-09-06 09:59  banananana  阅读(101)  评论(0编辑  收藏  举报