这个题解使用了BFS(广度优先搜索)的思路。具体来说,使用一个队列 treeQueue 来存储每一层的节点。首先将根节点入队,然后进入循环:将当前队列中的所有节点逐个出队,计算它们的值的总和,并将它们的非空子节点入队。这样就可以确保每次循环处理一层节点。将当前层节点值的总和除以节点数,就得到了这一层的平均值,将其存入结果数组中。当队列为空时,说明所有节点都已访问过,循环结束,返回结果数组。
时间复杂度: O(n)
空间复杂度: O(n)
# Definition for a binary tree node.
# 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: Optional[TreeNode]) -> List[float]:
if not root: return []
res = []
treeQueue = collections.deque([root]) # 初始时将根节点入队
while treeQueue:
levelsum = 0
levellen = len(treeQueue) # 当前层的节点数
for _ in range(levellen):
node = treeQueue.popleft() # 将当前层的节点逐个出队
if node.left: treeQueue.append(node.left) # 将下一层非空节点入队
if node.right: treeQueue.append(node.right)
levelsum += node.val # 累加当前层的节点值
res.append(levelsum / levellen) # 计算当前层的平均值并添加到结果中
return res