leetcode算法: Average of Levels in Binary Tree

Posted 稀里糊涂林老冷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

















































以上是关于leetcode算法: Average of Levels in Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章

[leetcode-637-Average of Levels in Binary Tree]

Leetcode 637. Average of Levels in Binary Tree

LeetCode: 637 Average of Levels in Binary Tree

LeetCode - 637. Average of Levels in Binary Tree

637. Average of Levels in Binary Tree - LeetCode

[LeetCode] Average of Levels in Binary Tree 二叉树的平均层数