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

  • 相关阅读:
    eventbus3-intellij-plugin插件搜不到
    flutter控件之CheckBox
    Java中常见数据结构:list与map -底层如何实现
    flutter控件之RadioButton
    git add Untracked files
    执行git push出现"Everything up-to-date"
    用flutter写一个精美的登录页面
    Android Studio最全插件整理
    Mac下git的环境搭建和基本使用
    上周热点回顾(7.1-7.7)团队
  • 原文地址:https://www.cnblogs.com/paulkg12/p/12356082.html
Copyright © 2011-2022 走看看