2025年--Lc165--H637.二叉树的层平均值(二叉树的层序遍历)--Java版

1.题目


2.思路

(1)广度优先搜索计算二叉树的层平均值。从根节点开始搜索,每一轮遍历同一层的全部节点,计算该层的节点数以及该层的节点值之和,然后计算该层的平均值。

(2)层次遍历,广度优先搜索用队列存储待访问节点,只要确保在每一轮遍历时,队列中的节点是同一层的全部节点。

1)初始时,将根节点加入队列;

2)每一轮遍历,将队列中的节点全部取出,计算这些节点的数量以及它们的节点值之和,并计算这些节点的平均值,

然后将这些节点的全部非空子节点加入队列,重复上述操作直到队列为空,遍历结束。

3)初始时队列中只有根节点,满足队列中的节点是同一层的全部节点,每一轮遍历时都会将队列中的当前层节点全部取出,并将下一层的全部节点加入队列,因此可以确保每一轮遍历的是同一层的全部节点。

3.代码实现

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Double> averageOfLevels(TreeNode root) {
        //列表存储平均数
        List<Double> avg=new ArrayList<Double>();
        //链表存储每次入队列的节点
        Queue<TreeNode> que=new LinkedList<TreeNode>();
        //先将根节点入队
        que.offer(root);
        //如果队列不为空
        while(!que.isEmpty())
        { //局部变量:sum是每层的总和,也是变化的
            double sum=0;
            //局部变量:size是根据当前层的节点个数变化的
            int size=que.size();
            for(int i=0;i<size;i++)
            {
                //将队列的元素弹出
                TreeNode node=que.poll();
                //本层元素加和
                sum=sum+node.val;
                //遍历本层元素的孩子节点,包括左节点和右节点
                TreeNode left=node.left;
                TreeNode right=node.right;
                if(left!=null)
                {  //如果左孩子节点不为空,入队
                    que.offer(left);
                }
                if(right!=null)
                {//如果右孩子节点不为空,入队
                    que.offer(right);
                }
            }
            //计算每层的平均数
            avg.add(sum/size);
        }
        return avg;
    }
}
相关推荐
Sam_Deep_Thinking几秒前
一个业务场景只需要一个ThreadLocal实例
java·面试
超梦dasgg4 分钟前
Dijkstra(迪杰斯特拉)算法详解
java·数据结构·算法
MacroZheng4 分钟前
给Claude Code装上这个超酷的状态栏,瞬间高大上了!
java·人工智能·后端
清风一徐6 分钟前
Python函数基础
开发语言·python
代码地平线7 分钟前
C++ 入门篇类和对象·上篇:从本质深剖类与对象与C++基本用法
c语言·开发语言·数据结构·c++·笔记·算法
有梦想的程序星空8 分钟前
【环境配置】IDEA+Scala 项目 JAR 打包异常完整排查指南
java·ide·intellij-idea
云上码厂9 分钟前
R 语言基于 lavaan 包实现结构方程模型 (SEM) 从环境配置到建模绘图全流程实战
开发语言·r语言
zhangfeng113312 分钟前
htc 中minconda 明明安装了 Python 3.10显示 python 3.8 因为 `conda activate` 没有真正切换成功
开发语言·python·conda
小程故事多_8013 分钟前
从初代架构到大模型时代,英伟达GPU底层架构演进与核心逻辑深度解析
java·人工智能·分布式·架构
十五年专注C++开发15 分钟前
C++17之类模板实参自动推导CTAD
开发语言·c++·聚合初始化·catd