当前位置: 首页 > ds >正文

leetcode刷题日记——二叉树的层平均值

[ 题目描述 ]:
在这里插入图片描述

[ 思路 ]:

  • BFS,通过层次遍历求得每层的和,然后取平均数,存入结果数组
  • 树中节点个数在1-10000之间,那么结果数组最大为10000个结果,层数最多为 2n-1>10000,可以推出 n 最小为 14,即 14层,那么最多的那层节点为 213 = 8096个
  • 由此,可得出以下代码
  • 运行如下
    在这里插入图片描述

[ 官方题解 ]:

  • 方法一:深度优先搜索,需要维护两个数组,counts 用于存储二叉树的每一层的节点数,sums 用于存储二叉树的每一层的节点值之和。搜索过程中需要记录当前节点所在层,如果访问到的节点在第 i 层,则将 counts[i] 的值加 1,并将该节点的值加到 sums[i]。
int countsSize;
int sumsSize;void dfs(struct TreeNode* root, int level, int* counts, double* sums) {if (root == NULL) {return;}if (level < sumsSize) {sums[level] += root->val;counts[level] += 1;} else {sums[sumsSize++] = (double)root->val;counts[countsSize++] = 1;}dfs(root->left, level + 1, counts, sums);dfs(root->right, level + 1, counts, sums);
}double* averageOfLevels(struct TreeNode* root, int* returnSize) {countsSize = sumsSize = 0;int* counts = malloc(sizeof(int) * 1001);double* sums = malloc(sizeof(double) * 1001);dfs(root, 0, counts, sums);double* averages = malloc(sizeof(double) * 1001);*returnSize = sumsSize;for (int i = 0; i < sumsSize; i++) {averages[i] = sums[i] / counts[i];}return averages;
}
  • 方法二:广度优先搜索,基本同上
http://www.xdnf.cn/news/10643.html

相关文章:

  • python库 PyYAML 详细使用
  • day62—DFS—太平洋大西洋水流问题(LeetCode-417)
  • 2024年12月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • vue3路由跳转的三种方式
  • 利用多进程定时播放,关闭音乐播放器
  • go环境配置
  • 深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制
  • UNION 与 UNION ALL 的区别
  • DAY 36 超大力王爱学Python
  • 设计模式——外观设计模式(结构型)
  • 力扣上C语言编程题
  • LangGraph(八)——LangGraph运行时
  • K3s简介、实战、问题记录
  • STM32F407寄存器操作(ADC非连续扫描模式)
  • 操作系统学习(九)——存储系统
  • AI 代理框架:使用正确的工具构建更智能的系统
  • 2025.6.1总结
  • 仓颉鸿蒙开发:制作底部标签栏
  • python训练营打卡第41天
  • 启动你的RocketMQ之旅(七)-Store存储原理
  • MySQL优化全链路实践:从慢查询治理到架构升级
  • 邮件验证码存储推荐方式
  • 前端基础学习html+css+js
  • 计算机网络第1章(上):网络组成与三种交换方式全解析
  • 【IC】多角多模式信号完整性优化
  • VBA数据库解决方案二十:Select表达式From区域Where条件Order by
  • 基于React + TypeScript构建高度可定制的QR码生成器
  • 鸿蒙OSUniApp结合机器学习打造智能图像分类应用:HarmonyOS实践指南#三方框架 #Uniapp
  • MCU SoC
  • Shape and boundary-aware