1. 问题描述:
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例 1:
输入:
3
/ \
9 20
/ \
15 7
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
提示:
节点值的范围在32位有符号整数范围内。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree
2. 思路分析:
分析题目可以知道我们可以使用宽搜的思路解决,宽搜需要借助一个队列,每一次我们搜索当前队列中的所有节点,队列中的所有节点表示当前这一层的节点,我们在搜索当前这一层节点的时候将当前节点的左右孩子加入到队列中表示加入下一层节点,这一层循环之后说明当前这一层的节点就搜索完了,求解平均值添加到答案中即可。
3. 代码如下:
from typing import List
import collections
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def averageOfLevels(self, root: TreeNode) -> List[float]:
res = list()
q = collections.deque([root])
# 搜索队列中的每一层
while q:
s = 0
count = len(q)
# 搜索当前层的所有节点
for i in range(count):
t = q.popleft()
# 计算当前这一层节点的总和
s += t.val
# 左儿子存在加入左儿子
if t.left:
q.append(t.left)
# 右儿子存在加入右儿子
if t.right:
q.append(t.right)
res.append(s / count)
return res