给定一个非空二叉树的根节点 root
, 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5
以内的答案可以被接受。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。 因此返回 [3, 14.5, 11] 。
示例 2:
输入:root = [3,9,20,15,7] 输出:[3.00000,14.50000,11.00000]
提示:
- 树中节点数量在
[1, 104]
范围内 -231 <= Node.val <= 231 - 1
步骤1:题目计算问题性质定义
输入:
- 一个非空二叉树的根节点
root
。
输出:
- 一个数组,包含每一层节点的平均值。
限制条件:
- 树中节点数量在 [1, 10^4] 范围内。
- 节点的值在 [-2^31, 2^31 - 1] 范围内。
边界条件:
- 树只有一个节点时,直接返回该节点的值。
- 所有节点的值都相同,返回的数组中所有元素都相等。
- 树的层级非常深,需要考虑算法对内存的使用。
步骤2:解题步骤分解
解决方案:
- 使用广度优先搜索(BFS)来遍历树的每一层。
- 对于每一层,计算所有节点的值的总和以及节点数量。
- 计算平均值,并将结果添加到结果数组中。
算法设计思路:
- BFS是解决此类层序遍历问题的常用方法,因为它可以逐层访问节点。
- 时间复杂度:O(N),其中N是树中节点的数量,因为每个节点都被访问一次。
- 空间复杂度:O(N),在最坏情况下,队列可能包含树的所有节点。
步骤3:C++代码实现
步骤4:通过解决问题的启发
通过解决这个问题,我们可以了解到:
- BFS算法在处理层序遍历问题时的有效性。
- 如何在遍历过程中维护每一层的节点信息。
- 在处理平均值时,注意数据类型的选择以避免溢出。
步骤5:算法的实际应用
实际应用示例:
具体实现方法: