• leetcode129 Sum Root to Leaf Numbers


     1 """
     2 Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.
     3 An example is the root-to-leaf path 1->2->3 which represents the number 123.
     4 Find the total sum of all root-to-leaf numbers.
     5 Note: A leaf is a node with no children.
     6 Example:
     7 Input: [1,2,3]
     8     1
     9    / 
    10   2   3
    11 Output: 25
    12 Explanation:
    13 The root-to-leaf path 1->2 represents the number 12.
    14 The root-to-leaf path 1->3 represents the number 13.
    15 Therefore, sum = 12 + 13 = 25.
    16 Example 2:
    17 Input: [4,9,0,5,1]
    18     4
    19    / 
    20   9   0
    21  / 
    22 5   1
    23 Output: 1026
    24 Explanation:
    25 The root-to-leaf path 4->9->5 represents the number 495.
    26 The root-to-leaf path 4->9->1 represents the number 491.
    27 The root-to-leaf path 4->0 represents the number 40.
    28 Therefore, sum = 495 + 491 + 40 = 1026.
    29 """
    30 """
    31 本题两种解法
    32 第一种为递归
    33 """
    34 
    35 class TreeNode:
    36     def __init__(self, x):
    37         self.val = x
    38         self.left = None
    39         self.right = None
    40 
    41 class Solution1:
    42     def sumNumbers(self, root):
    43         self.res = 0  # !!!res申请为全局变量,保存总的结果
    44         self.sum(root, 0)  # !!!第一次传0值是为了递归的时候传入正确的根结点值
    45         return self.res
    46 
    47     def sum(self, root, value):
    48         if root:
    49             if root.left == None and root.right == None:  # !!!判断叶子结点
    50                 self.res += 10 * value + root.val
    51             self.sum(root.left, 10 * value + root.val)
    52             self.sum(root.right, 10 * value + root.val)
    53 
    54 """
    55 非递归的写法,先用tuple存储(value, root)
    56 然后入队列遍历
    57 """
    58 
    59 class Solution2:
    60     def sumNumbers(self, root):
    61         res = 0
    62         if root == None:
    63             return res
    64         queue = []
    65         x = (0, root)  # tuple元组,(父亲结点的值,结点)
    66         queue.append(x)
    67         while queue:
    68             value, node = queue.pop()  # 头结点出队
    69             if node:
    70                 if not node.left and not node.right:  # 判断叶子结点,加各个路径的和
    71                     res = res + node.val + value * 10
    72                 queue += [(node.val + 10 * value, node.left), (node.val + 10 * value, node.right)]
    73                 # 层次遍历 也可以用queue.extend([(, ), (, )])来写
    74         return res
  • 相关阅读:
    修改DataSet列名
    对象的比较
    运算符
    安装vs2012详细步骤
    游戏开发-cocos creator踩坑-发布后pc正常,手机加载失败
    cocos creator基础-(十六)自定义的帧动画播放组件(需要优化)
    cocos creator基础-(十七)TexturePacker图集打包
    cocos creator基础-(十五)碰撞检测系统
    cocos creator基础-(十四)cc.widget与屏幕适配
    cocos creator基础-(十三)cc.Loader使用
  • 原文地址:https://www.cnblogs.com/yawenw/p/12305550.html
Copyright © 2020-2023  润新知