【二叉树】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 是二叉树中最宽的一层的节点数。在最坏情况下,队列中会存储最多一层的所有节点。
相关推荐
不穿格子的程序员12 分钟前
从零开始学算法——链表篇3:合并两个有序链表 + 两数相加
数据结构·算法·链表·dummy
暴风鱼划水31 分钟前
算法题(Python)哈希表 | 2.两个数组的交集
python·算法·哈希表
fufu031136 分钟前
Linux环境下的C语言编程(四十二)
linux·c语言·算法
HalvmånEver40 分钟前
Linux : 基础IO(三)
linux·运维·算法
oushaojun241 分钟前
linux中backtrace实战
linux·运维·算法·backtrace
埃伊蟹黄面1 小时前
模拟算法思想
c++·算法·leetcode
副露のmagic1 小时前
更弱智的算法学习day 10
python·学习·算法
逸风尊者1 小时前
开发可掌握的知识:uber H3网格
后端·算法
半问1 小时前
付费投流硬控互联网
人工智能·算法·互联网·推荐·流量
西岸行者1 小时前
学习Hammerstein-Wiener 模型,以及在回声消除场景中的应用
人工智能·学习·算法