返回

LeetCode:层序遍历二叉树求每一层的节点平均值

前端

问题

给定一个二叉树,找出每一层节点的平均值。

示例:

     3
    / \
   9  20
     /  \
    15   7

返回:

[3, 14.5, 11]

解决思路

解决该问题,我们可以采用层序遍历算法。层序遍历,也称为广度优先搜索(BFS),是一种遍历树形结构的算法,它从根节点开始,依次访问每一层的节点,再访问下一层的节点,直到遍历完整个树。

层序遍历算法可以帮助我们按层级将二叉树的节点分组,从而方便地计算每一层的节点平均值。具体步骤如下:

  1. 初始化一个队列,并将根节点入队。
  2. 循环执行以下步骤,直到队列为空:
    • 将队列中的所有节点出队,并计算它们的平均值。
    • 将这些节点的子节点入队。

通过以上步骤,我们可以按层级顺序访问二叉树中的所有节点,并计算出每一层的节点平均值。

实现细节

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),因为我们在最坏情况下需要存储二叉树中所有节点的引用。

总结

通过解决「层序遍历二叉树求每一层的节点平均值」这一问题,我们学习了层序遍历算法的原理和实现方法,并将其应用于计算二叉树中每一层的节点平均值。这一算法不仅可以用于解决该问题,还可以在其他类似的问题中发挥作用。