• 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 框架正确。

  • 相关阅读:
    Python爬虫之路——简单的网页抓图
    vim修复,telnet安装启动,linux更新软件源
    用博客记录成长的历程
    CleanCode代码整洁之道培训总结(2015-03-14)
    MySQL 登录问题
    LeetCode——Set Matrix Zeroes
    CSS vertical-align属性的使用方法
    电子商务站点设计分析--首屏设计
    easyUI资料学习资料
    java实现DES加密与解密,md5加密
  • 原文地址:https://www.cnblogs.com/paulkg12/p/12356082.html
Copyright © 2020-2023  润新知