zoukankan      html  css  js  c++  java
  • leetcode算法: Average of Levels in Binary Tree

    Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.

    Example 1:
    Input:
    3
    /
    9 20
    /
    15 7
    Output: [3, 14.5, 11]
    Explanation:
    The average value of nodes on level 0 is 3, on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].
    Note:
    The range of node's value is in the range of 32-bit signed integer.



    这道题描述的是:
    给我们一颗完全二叉树,我们求出二叉树每层的节点平均值

    我的思想:
    对二叉树进行广度遍历,用一个二维数组存下每一层的所有节点
    再对每一层所有节点进行求平均数


    伪代码:
    python中数组是动态的
    用一个levels列表,里面每一个元素都是一个列表,列表里存着每层的所有节点
    广度遍历的时候,动态生成下一个元素和下一层列表

    1 levels = [[root] ] 根自己是第一层,levels里面
    2 对levels 一个一个拿出里面的列表用level表示
    (如果取出来的是空列表,说明到最后一层了,跳出循环)
    2.1 当前列表level为一层,里面存着所有当前层元素
    2.2 为levels追加一个空列表[] 用于存储下一层
    2.3 一个一个取出level里面的元素node
    如果 node有left,node.left追加到下一层列表
    如果 node有right,node.right追加到下一层列表
    2.4 计算当前层所有节点的平均值,追加大结果列表res



    我的python代码:
     1 # Definition for a binary tree node.
     2 # class TreeNode(object):
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.left = None
     6 #         self.right = None
     7 
     8 class Solution(object):
     9     def averageOfLevels(self, root):
    10         """
    11         :type root: TreeNode
    12         :rtype: List[float]
    13         """
    14         levels = [[root]] #将要进行广度遍历,每一层新开一个列表,每个列表存着每层的节点
    15         res = [ ]  #用于存储每层的平均数
    16         i = 0
    17         while i < len(levels) and levels[i] != []:
    18             level = levels[i]
    19             j = 0
    20             temp = 0    # 临时变量用于存储当前层的节点值加和
    21             levels.append([])   #开启新的一层
    22             while j < len(level):
    23                 node = level[j]
    24                 if node.left is not None:
    25                     levels[i+1].append(node.left)
    26                 if node.right is not None:
    27                     levels[i+1].append(node.right)
    28                 temp+=node.val
    29                 j += 1
    30             res.append(temp/j)
    31             i += 1
    32         return res



  • 相关阅读:
    Java练习 标准输入,输出,以及switch判断
    Java练习 标准输入,输出,以及if else判断
    Java 语句和流程控制
    Java的运算符,Java的表达式
    理解 Linux 的硬链接与软链接(转)
    第一范式、第二范式、第三范式详解(转自知乎)
    TCP/IP协议图解
    POSIX条件变量
    自旋锁与读写锁
    POSIX信号量与互斥锁实现生产者消费者模型
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/7565324.html
Copyright © 2011-2022 走看看