【二叉树】Leetcode 637. 二叉树的层平均值【简单】

二叉树的层平均值

  • 给定一个非空二叉树的根节点 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 。

解题思路

广度优先搜索 (BFS):

  • 使用队列来实现BFS,从根节点开始,逐层遍历二叉树。

逐层处理:

  • 在遍历每一层时,记录当前层的节点数量,计算当前层节点值的总和,然后计算平均值。

存储结果:

  • 将每层的平均值存储在一个列表中,最终返回这个列表。

Java实现

java 复制代码
public class AverageOfLevels {
    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> result = new ArrayList<>();
        if (root == null) {
            return result;
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);

        while (!queue.isEmpty()) {
            int levelSize = queue.size();
            double sum = 0;
            for (int i = 0; i < levelSize; i++) {
                TreeNode node = queue.poll();
                sum += node.val;
                if (node.left != null) {
                    queue.add(node.left);
                }
                if (node.right != null) {
                    queue.add(node.right);
                }
            }
            result.add(sum / levelSize);
        }

        return result;
    }

    public static void main(String[] args) {
        AverageOfLevels averageOfLevels = new AverageOfLevels();

        // 构建示例二叉树
        TreeNode root = new TreeNode(3);
        root.left = new TreeNode(9);
        root.right = new TreeNode(20);
        root.right.left = new TreeNode(15);
        root.right.right = new TreeNode(7);

        // 计算每层的平均值
        List<Double> result = averageOfLevels.averageOfLevels(root);
        System.out.println("Average of levels: " + result);  // 输出: [3.0, 14.5, 11.0]
    }
}

时间空间复杂度

  • 时间复杂度:O(n),其中 n 是二叉树中的节点数。每个节点仅被访问一次。
  • 空间复杂度:O(m),其中 m 是二叉树中最宽的一层的节点数。在最坏情况下,队列中会存储最多一层的所有节点。
相关推荐
一只小小的芙厨11 小时前
【线性DP】
学习·算法·动态规划
奋发向前wcx12 小时前
CSP-J复赛模拟赛5 王晨旭补题 2026.10.5
算法
罗湖老棍子13 小时前
C Looooops(信息学奥赛一本通- P1640)
算法·数论·同余·裴蜀定理·扩展欧几里得
飘尘16 小时前
从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
人工智能·算法·面试
夏幻灵16 小时前
每日一题:LeetCode 3:无重复字符的最长子串——滑动窗口思路详解
算法·leetcode·职场和发展
CarIise17 小时前
Java实训阶段查漏补缺复习笔记2
java·linux·算法
无忧.芙桃17 小时前
C++ 并查集详解:原理、实现与应用
c语言·c++·算法·leetcode
蛋蛋的就会顺顺的17 小时前
hot100——二叉树
java·数据结构·算法·leetcode·力扣
Code_Solitude18 小时前
c语言:二分法的完整补充
c语言·开发语言·算法
一切皆是因缘际会18 小时前
掌控信息论:同源星际通信基础理论
人工智能·算法·ai