1、题目描述
https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
输入:
3
/ \
9 20
/ \
15 7
输出:[3, 14.5, 11]
解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。
因此返回 [3, 14.5, 11] 。
2、代码详解
python3的 / 才是正常除,Python2的/是地板除
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def averageOfLevels(self, root):
"""
:type root: TreeNode
:rtype: List[float]
"""
queue = [] # 双端队列,存储TreeNode
result = [] # 存储弹出的队头值
if root == None:
return []
queue.append(root)
while len(queue) > 0:
level_size = len(queue) # 每层
current_level = [] # 当前层:一层存在一个list中
for _ in range(level_size): # 仅pop(0)出当前层的
queueHead = queue.pop(0) # 弹出队首的树节点(出队)
current_level.append(queueHead.val) # 存储被弹出树节点的值
# 左右孩子节点入队
if queueHead.left:
queue.append(queueHead.left)
if queueHead.right:
queue.append(queueHead.right)
result.append(sum(current_level)/level_size) # 除法必须在Python3
return result
pNode1 = TreeNode(3)
pNode2 = TreeNode(9)
pNode3 = TreeNode(20)
pNode6 = TreeNode(15)
pNode7 = TreeNode(17)
pNode1.left = pNode2
pNode1.right = pNode3
pNode3.left = pNode6
pNode3.right = pNode7
s = Solution()
print(s.averageOfLevels(pNode1)) # [3.0, 14.5, 16.0]