【LeetCode】637. 二叉树的层平均值

 

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func averageOfLevels(root *TreeNode) []float64 {
    var result []float64
    queue := []*TreeNode{root}
    
    for len(queue) > 0 {
        levelSize := len(queue)
        sum := 0.0
        
        for i := 0; i < levelSize; i++ {
            node := queue[0]
            queue = queue[1:]
            sum += float64(node.Val)
            
            if node.Left != nil {
                queue = append(queue, node.Left)
            }
            if node.Right != nil {
                queue = append(queue, node.Right)
            }
        }
        
        result = append(result, sum / float64(levelSize))
    }
    
    return result
}

核心思路

  1. 层序遍历
    使用队列进行广度优先搜索(BFS),逐层处理节点。

  2. 逐层累加求和
    每次循环处理一层的所有节点,计算该层节点值的总和。

  3. 计算平均值
    每层处理完毕后,将总和除以节点数量得到平均值,存入结果数组。

关键步骤

  • 队列初始化:从根节点开始遍历

  • 层节点计数:通过当前队列长度确定每层节点数

  • 子节点入队:保证下一层节点按顺序处理

  • 精度处理:使用 float64 类型存储总和和平均值,确保小数精度

复杂度分析

  • 时间复杂度 O(n):每个节点被访问一次

  • 空间复杂度 O(n):队列最多存储最后一层的所有节点(最坏情况为完全二叉树最后一层)

示例解析

以输入 root = [3,9,20,null,null,15,7] 为例:

  1. 第0层:仅节点3 → 平均值为3.0

  2. 第1层:节点9和20 → 平均值 (9+20)/2 =14.5

  3. 第2层:节点15和7 → 平均值 (15+7)/2=11.0

最终输出 [3.0, 14.5, 11.0]

posted @ 2025-03-11 15:16  云隙之间  阅读(10)  评论(0)    收藏  举报