力扣解题-637. 二叉树的层平均值
力扣解题-637. 二叉树的层平均值给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10⁻⁵ 以内的答案可以被接受。示例 1输入root [3,9,20,null,null,15,7]输出[3.00000,14.50000,11.00000]解释第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。示例 2:输入root [3,9,20,15,7]输出[3.00000,14.50000,11.00000]提示树中节点数量在 [1, 10⁴] 范围内-2³¹ Node.val 2³¹ - 1Related Topics树、深度优先搜索、广度优先搜索、二叉树第一次解答解题思路核心方法广度优先搜索BFS层级遍历法利用队列实现二叉树的层级遍历逐层计算节点值的总和与数量最终求得平均值时间复杂度O(n)、空间复杂度O(n)是本题最直观、最高效的解法。核心逻辑拆解求层平均值的核心是“按层遍历逐层计算”关键在于精准区分每一层的节点初始化创建结果列表存储各层平均值队列存储待遍历节点先将根节点入队层级遍历循环队列非空时持续处理每一层记录层大小每次循环开始时队列的长度即为当前层的节点数sizequeue.size()计算层总和遍历当前层的所有节点循环size次累加节点值到总和sum并将节点的左右子节点入队为下一层遍历做准备计算平均值当前层总和除以节点数将结果加入结果列表返回结果遍历完所有层后返回存储平均值的列表。具体步骤以示例1 root[3,9,20,null,null,15,7]为例遍历层级队列初始状态层大小size累加过程层总和sum平均值结果列表0根层[3]1sum 333.0[3.0]1[9,20]2sum 9 20 292914.5[3.0, 14.5]2[15,7]2sum 15 7 222211.0[3.0, 14.5, 11.0]关键细节说明层大小固定必须在遍历当前层前记录queue.size()因为遍历过程中会将下一层节点入队队列长度会动态变化数据类型选择总和sum使用double类型避免int溢出节点值范围达2³¹多层累加易超出int范围平均值直接用sum/size计算保证精度满足题目要求10⁻⁵以内边界处理题目保证树非空无需处理rootnull的情况叶子节点的左右子节点为null不会入队不影响层遍历。性能说明时间复杂度O(n)每个节点仅入队/出队一次n为节点总数空间复杂度O(n)最坏情况队列存储一层所有节点如完全二叉树最后一层有n/2个节点优势层级遍历逻辑直观与“按层求平均值”的需求高度契合一次遍历即可完成计算无冗余操作代码简洁易理解和调试。publicListDoubleaverageOfLevels(TreeNoderoot){ListDoubleresnewArrayList();QueueTreeNodequeuenewLinkedList();queue.offer(root);while(!queue.isEmpty()){intsizequeue.size();doublesum0;for(inti0;isize;i){TreeNodenodequeue.poll();sumnode.val;if(node.left!null){queue.offer(node.left);}if(node.right!null){queue.offer(node.right);}}res.add(sum/size);}returnres;}示例解答解题思路解法1深度优先搜索DFS递归法拓展思路核心方法DFS递归记录每层总和与节点数通过递归遍历二叉树用两个列表分别记录每一层的节点值总和和节点数量最后遍历列表计算平均值时间复杂度O(n)、空间复杂度O(h)h为树的高度。代码实现publicListDoubleaverageOfLevels(TreeNoderoot){// 存储每层的总和ListLongsumListnewArrayList();// 存储每层的节点数ListIntegercountListnewArrayList();// 递归遍历初始层级为0dfs(root,0,sumList,countList);// 计算平均值ListDoubleresnewArrayList();for(inti0;isumList.size();i){res.add(sumList.get(i)*1.0/countList.get(i));}returnres;}privatevoiddfs(TreeNodenode,intlevel,ListLongsumList,ListIntegercountList){if(nodenull){return;}// 首次访问该层级初始化总和和数量if(levelsumList.size()){sumList.add((long)node.val);countList.add(1);}else{// 非首次访问累加总和、增加数量sumList.set(level,sumList.get(level)node.val);countList.set(level,countList.get(level)1);}// 递归遍历左右子树层级1dfs(node.left,level1,sumList,countList);dfs(node.right,level1,sumList,countList);}核心逻辑说明递归参数level当前节点所在层级根节点为0sumList按层级存储节点值总和用Long避免溢出countList按层级存储节点数量递归处理首次访问某层级时初始化该层级的总和和数量非首次访问时累加总和、增加数量递归遍历左右子树层级1计算平均值遍历sumList和countList用“总和/数量”得到各层平均值。性能说明时间复杂度O(n)每个节点仅被访问一次空间复杂度O(h)递归栈深度等于树的高度sumList和countList的长度等于层数最多h优势无需使用队列空间复杂度在平衡树场景下优于BFSO(logn) vs O(n)适合需要同时处理层级相关的其他统计信息如总和、最大值、最小值劣势需要额外的列表存储中间结果逻辑比BFS稍复杂。解法2BFS优化版高精度处理核心方法在原BFS基础上优化数据类型使用long存储总和避免极端场景下的精度损失进一步提升结果准确性。代码实现publicListDoubleaverageOfLevels(TreeNoderoot){ListDoubleresnewArrayList();QueueTreeNodequeuenewLinkedList();queue.offer(root);while(!queue.isEmpty()){intsizequeue.size();longsum0;// 改用long存储总和避免int溢出for(inti0;isize;i){TreeNodenodequeue.poll();sumnode.val;if(node.left!null)queue.offer(node.left);if(node.right!null)queue.offer(node.right);}// 转换为double计算平均值保证精度res.add((double)sum/size);}returnres;}优化说明总和类型优化将sum从double改为long先以整数形式累加最后再转换为double计算平均值避免多次浮点累加的精度损失适用场景当节点值数量大、层级多的时候该优化能让结果更接近真实值满足题目“与实际答案相差10⁻⁵以内”的要求。总结BFS层级遍历法第一次解答O(n)时间O(n)空间逻辑直观、代码简洁是本题的工程最优解DFS递归法O(n)时间O(h)空间空间复杂度在平衡树场景下更优适合拓展层级相关的统计需求BFS高精度版O(n)时间O(n)空间优化数据类型提升极端场景下的计算精度关键技巧核心思想求层平均值的关键是“区分层级”BFS通过队列大小固定层级DFS通过层级参数标记层级溢出处理必须用long/double存储总和避免int溢出精度保证最终平均值用浮点除法计算满足题目精度要求。

相关新闻

CST超表面仿真:近场成像与全息案例

CST超表面仿真:近场成像与全息案例

cst超表面仿真 近场成像与全息案例超表面这玩意儿在微波和光学领域都快被玩出花了,今天咱们就聊聊怎么用CST调教这种神奇结构。搞电磁的兄弟们都懂,超表面的核心就是把一堆亚波长单元排列组合,整出各种匪夷所思的电磁响应。不过实操时最头疼的…

2026/7/3 11:40:11 阅读更多 →
scanf 处理规则

scanf 处理规则

。scanf 对空白字符(空格、换行符、制表符等)的处理规则是有区别的。✅ 会忽略前导空格的情况对于绝大多数格式说明符,scanf 在读取数据前会自动跳过所有前导空白字符。这包括:%d, %f, %lf 等数值类型%s 字符串类型不会忽略前导空…

2026/5/17 11:56:13 阅读更多 →
AI编程工具杂谈:从智能体到龙虾,codebuddy到workbuddy

AI编程工具杂谈:从智能体到龙虾,codebuddy到workbuddy

大模型都是“通用”,所以,不要把工作局限于“编程”写代码,其它行业也大有用武之地。我看到某宇宙级大所(律师事务所),居然也在微信公众号发了一篇如何安装OpenClaw的文章,这个是让我惊讶的&…

2026/5/17 5:48:17 阅读更多 →

最新新闻

冠宇仪器中标快检项目:盐都区农贸市场试剂采购彰显技术实力

冠宇仪器中标快检项目:盐都区农贸市场试剂采购彰显技术实力

近日,冠宇仪器制造(江苏)有限公司成功中标盐城市盐都区市场监督管理局农贸市场快检室试剂采购项目的消息,在食品安全快检行业引发广泛关注。企业凭借过硬的产品性能、全流程闭环服务体系和高性价比的落地方案脱颖而出,…

2026/7/3 11:39:50 阅读更多 →
在GEO优化中,是否应当优先考虑内容的视觉呈现?

在GEO优化中,是否应当优先考虑内容的视觉呈现?

随着生成式AI日益成为信息获取的重要渠道,GEO(生成式引擎优化)正悄然重塑品牌的数字曝光逻辑。在这场以内容质量为核心的角逐中,一个核心矛盾浮出水面:精心雕琢的文字,是否真的需要依赖夺目的视觉元素来“开…

2026/7/3 11:37:50 阅读更多 →
深度学习模型:量化与蒸馏

深度学习模型:量化与蒸馏

模型量化与知识蒸馏是深度学习模型轻量化的两大核心技术,广泛应用于移动端、嵌入式等低资源部署场景。二者核心逻辑完全不同,常搭配使用实现“高精度、低体积、高速度”的落地效果。本文融合理论与实战,精简冗余内容,搭配可直接运…

2026/7/3 11:37:50 阅读更多 →
Si4731与PIC18F4553构建数字收音机系统全解析

Si4731与PIC18F4553构建数字收音机系统全解析

1. Si4731与PIC18F4553的硬件搭档解析Si4731是Silicon Labs推出的一款高性能AM/FM/SW无线电接收芯片,采用数字低中频架构,支持从150kHz到30MHz的调幅广播和76MHz到108MHz的调频广播接收。其核心优势在于:集成完整的射频前端,仅需少…

2026/7/3 11:37:50 阅读更多 →
GTA5线上小助手终极指南:免费开源工具让你的洛圣都冒险更自由

GTA5线上小助手终极指南:免费开源工具让你的洛圣都冒险更自由

GTA5线上小助手终极指南:免费开源工具让你的洛圣都冒险更自由 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools GTA5线上小助手是一款完全免费的开源游戏辅助工具,专为《侠盗猎车手…

2026/7/3 11:37:50 阅读更多 →
零担货总破损?一文搞懂 ISTA 3B测试包含哪些项目

零担货总破损?一文搞懂 ISTA 3B测试包含哪些项目

做工业设备、大件货物、托盘货的商家,经常遇到零担混运磕碰损坏问题,ISTA 3B 就是 LTL 零担运输专用包装全套检测标准,2017 版为现行通用版本,能完整复刻公路转运全部损伤工况,是工厂、外贸必备包装验证方案。一、哪些…

2026/7/3 11:31:48 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻