返回
LeetCode:层序遍历二叉树求每一层的节点平均值
前端
2023-12-26 09:55:53
问题
给定一个二叉树,找出每一层节点的平均值。
示例:
3
/ \
9 20
/ \
15 7
返回:
[3, 14.5, 11]
解决思路
解决该问题,我们可以采用层序遍历算法。层序遍历,也称为广度优先搜索(BFS),是一种遍历树形结构的算法,它从根节点开始,依次访问每一层的节点,再访问下一层的节点,直到遍历完整个树。
层序遍历算法可以帮助我们按层级将二叉树的节点分组,从而方便地计算每一层的节点平均值。具体步骤如下:
- 初始化一个队列,并将根节点入队。
- 循环执行以下步骤,直到队列为空:
- 将队列中的所有节点出队,并计算它们的平均值。
- 将这些节点的子节点入队。
通过以上步骤,我们可以按层级顺序访问二叉树中的所有节点,并计算出每一层的节点平均值。
实现细节
def average_of_levels(root):
"""
:type root: TreeNode
:rtype: List[float]
"""
if not root:
return []
queue = [root]
result = []
while queue:
level_sum = 0
level_size = len(queue)
for _ in range(level_size):
node = queue.pop(0)
level_sum += node.val
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level_sum / level_size)
return result
复杂度分析
- 时间复杂度:O(N),其中 N 是二叉树中的节点数。因为我们遍历了二叉树中的每个节点一次。
- 空间复杂度:O(N),因为我们在最坏情况下需要存储二叉树中所有节点的引用。
总结
通过解决「层序遍历二叉树求每一层的节点平均值」这一问题,我们学习了层序遍历算法的原理和实现方法,并将其应用于计算二叉树中每一层的节点平均值。这一算法不仅可以用于解决该问题,还可以在其他类似的问题中发挥作用。