【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 }
核心思路
-
层序遍历
使用队列进行广度优先搜索(BFS),逐层处理节点。 -
逐层累加求和
每次循环处理一层的所有节点,计算该层节点值的总和。 -
计算平均值
每层处理完毕后,将总和除以节点数量得到平均值,存入结果数组。
关键步骤
-
队列初始化:从根节点开始遍历
-
层节点计数:通过当前队列长度确定每层节点数
-
子节点入队:保证下一层节点按顺序处理
-
精度处理:使用
float64类型存储总和和平均值,确保小数精度
复杂度分析
-
时间复杂度 O(n):每个节点被访问一次
-
空间复杂度 O(n):队列最多存储最后一层的所有节点(最坏情况为完全二叉树最后一层)
示例解析
以输入 root = [3,9,20,null,null,15,7] 为例:
-
第0层:仅节点3 → 平均值为3.0
-
第1层:节点9和20 → 平均值 (9+20)/2 =14.5
-
第2层:节点15和7 → 平均值 (15+7)/2=11.0
最终输出 [3.0, 14.5, 11.0]。

浙公网安备 33010602011771号