zoukankan      html  css  js  c++  java
  • 637. 二叉树的层平均值 ;值得思考的层序遍历

    值得思考的层序遍历.md

    1. 二叉树的层平均值

    https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/

    描述

    
    给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.
    
    示例 1:
    
    输入:
        3
       / 
      9  20
        /  
       15   7
    输出: [3, 14.5, 11]
    解释:
    第0层的平均值是 3,  第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].
    

    try1

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def averageOfLevels(self, root: TreeNode) -> List[float]:
            if root == None: return [0]
            ret = []
            que = []
            que.append(root)
            sum = 0
            watcher = len(que)
            counter = 0
            while(len(que) != 0) :
                node = que.pop(0)
                sum += node.val
                counter += 1
    
                # if we traverse all node in one level
                if (counter == watcher):
                    watcher = len(que)
                    ret.append(sum / counter)
                    counter = 0
                    sum = 0
                if node.left: que.append(node.left)
                if node.right: que.append(node.right)
            return ret
    

    final ans

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        def averageOfLevels(self, root: TreeNode) -> List[float]:
            if root == None: return [0]
            ret = []
            que = []
            que.append(root)
            sum = 0
            watcher = len(que)
            counter = 0
            while(len(que) != 0) :
                sum = 0
                counter = 0
                watcher = len(que)
                while counter < watcher:
                    node = que.pop(0)
                    sum += node.val
                    if node.left: que.append(node.left)
                    if node.right: que.append(node.right)
                    counter += 1
                ret.append(sum / counter)
    
            return ret
    '''
    执行用时 :
    88 ms
    , 在所有 Python3 提交中击败了
    19.58%
    的用户
    内存消耗 :
    15.8 MB
    , 在所有 Python3 提交中击败了
    44.35%
    的用户
    '''
    

    think; different;

    final ans 和 try 1 的区别就是

    final ans 是在层序遍历中内嵌一个循环, 做小规模的 本 level 的问题。

    try1 的失败是,企图使用一个while,完成整个问题:使用if拦截,结果是不对的,因为拦截存在失误。

    todo 找到 try1 的if 拦截 失误在哪里, 可否令try1 框架正确。

  • 相关阅读:
    Django动态下载文件
    单反学习
    网页开发
    从一堆数中随机取出一些值的方法
    C/C++使用HTTP协议上传
    django 初级(一) 配置与周边
    c++11
    外观模式
    sqlite
    linux程序设计1
  • 原文地址:https://www.cnblogs.com/paulkg12/p/12356082.html
Copyright © 2011-2022 走看看