159.二叉树:二叉树的层平均值(力扣)

代码解决

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<double> averageOfLevels(TreeNode* root) 
    {
        queue<TreeNode*> que;  // 定义队列用于层次遍历
        if (root != NULL) que.push(root);  // 如果根节点不为空,则将根节点加入队列
        vector<double> result;  // 声明结果向量,用于存储每层的节点值平均值
        while (!que.empty())  // 当队列不为空时,继续处理
        {
            int size = que.size();  // 获取当前层的节点数量
            double sum = 0;  // 初始化当前层节点值的和
            for (int i = 0; i < size; i++)  // 遍历当前层的每一个节点
            {
                TreeNode* node = que.front();  // 从队列中取出一个节点
                que.pop();  // 将该节点从队列中移除
                sum += node->val;  // 累加节点值
                if (node->left) que.push(node->left);  // 如果该节点有左子节点,将其加入队列
                if (node->right) que.push(node->right);  // 如果该节点有右子节点,将其加入队列
            }
            result.push_back(sum / size);  // 计算当前层节点值的平均值,并加入结果向量
        }
        return result;  // 返回结果向量
    }
};

代码是解决“二叉树的层平均值”问题的C++代码,这个问题要求计算二叉树中每一层的节点值的平均值,并返回一个包含这些平均值的列表。

代码同样使用了广度优先搜索(BFS)的方法。主要思路是使用一个队列来进行层次遍历,在每一层遍历的时候,计算所有节点的值的总和以及节点的数量,然后用总和除以节点数量得到平均值。

这里简要解释一下代码的工作流程:

  1. 初始化一个空的结果向量 result 来存储每层节点值的平均值。
  2. 使用一个队列 que 来进行层次遍历,首先判断根节点是否为空,如果不为空,则将其加入队列。
  3. 当队列不为空时,进行遍历:
    • 获取当前队列的长度,这个长度代表了当前层的节点数。
    • 初始化一个变量 sum 来存储当前层节点值的总和。
    • 遍历当前层的每一个节点:
      • 从队列中取出一个节点。
      • 将这个节点的值加到 sum 上。
      • 如果这个节点有左子节点或右子节点,将它们加入队列,以便进行下一层的遍历。
    • 计算当前层节点值的平均值(sum / size),并加入结果向量。
  4. 队列为空时,遍历结束,返回结果向量。

这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是树中节点的数量。空间复杂度也是 O(n),因为需要存储整个树的节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/664388.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mybatisPlus3.5.1有个奇葩bug的解决方法

mybatisPlus3.5.1有个奇葩bug的解决方法 文章目录 1.啥bug&#xff1f;1.1mybatisPlus官网及GitHub项目地址1.2 bug问题 2.解决方法2.1根据报错修改表中字段2.2 升级JSqlParser依赖的版本2.3升级mybatisPlus的版本 3.mysql关键字大全4.总结 1.啥bug&#xff1f; 1.1mybatisPlu…

上传RKP 证书签名请求息上传到 Google 的后端服务器

上传证书签名请求 1.准备环境&#xff1a;OK pip3 install google-auth2.13.0 requests2.28下载 device_info_uploader.py 。 没找到先跳过 选项 1&#xff1a;通过 GCP 帐户使用 device_info_uploader.py 运行脚本。 ./device_info_uploader.py --credentials /secure/s…

软件测试可发现所有bug吗?有什么样的原则和目的?

在今天的高度数字化时代&#xff0c;软件测试的重要性不可忽视。这是一种系统性的过程&#xff0c;通过对软件系统进行评估和验证&#xff0c;以确定其是否满足预期要求。在软件开发的各个阶段&#xff0c;软件测试都扮演着至关重要的角色。它涉及到软件功能、性能、安全性等多…

基于Spring Boot框架的分页查询和文件上传

分页查询 分析 要想从数据库中进行分页查询&#xff0c;我们要使用LIMIT关键字&#xff0c;格式为&#xff1a;limit 开始索引 每页显示的条数 假设一页想展示10条数据 查询第1页数据的SQL语句是&#xff1a; select * from emp limit 0,10; 查询第2页数据的SQL语句是&…

【推荐】用scss循环zoom缩放比例,解决可视化大屏在不同分辨率屏幕下的适配问题

方法1&#xff1a; 指定几种常规屏幕宽度&#xff08;用这种方式就必须要强制用户全屏查看页面&#xff0c;在固定的宽度下才能达到比较不错的显示效果&#xff09; // 适配不同分辨率的页面---------------------------------------- html {overflow: hidden;width: 1920px;…

光电耦合器:航天航空领域的先进连接技术

光电耦合器作为一种关键的电子连接器&#xff0c;在航天航空领域扮演着重要角色。本文将深入探讨光电耦合器在航天航空领域的应用及其技术特点。 光电耦合器在航天航空领域的应用 光电耦合器作为一种高可靠性、高速传输、抗干扰能力强的连接器&#xff0c;在航天航空领域有着广…

Mybatis 查询TypeHandler使用,转译查询数据(逗号分隔转List)

创建自定义的Hanndler /*** Package: com.datalyg.common.core.handler* ClassName: CommaSeparatedStringTypeHandler* Author: dujiayu* Description: 用于mybatis 解析逗号拼接字符串* Date: 2024/5/29 10:03* Version: 1.0*/ public class CommaSeparatedStringTypeHandle…

U盘格式化怎么操作?快来学这4种法

U盘格式化怎么操作&#xff1f;在计算机领域中&#xff0c;格式化通常指对存储设备&#xff08;如硬盘、U盘&#xff09;进行格式化操作&#xff0c;清空其中的数据并重新建立文件系统&#xff0c;以便进行数据存储和管理。 U盘格式化一共有哪些方法&#xff1f;在格式化U盘之…

暑期来临,AI智能视频分析方案筑牢防溺水安全屏障

随着夏季暑期的来临&#xff0c;未成年人溺水事故频发。传统的防溺水方式往往依赖于人工巡逻和警示标识的设置&#xff0c;但这种方式存在人力不足、反应速度慢等局限性。近年来&#xff0c;随着视频监控智能分析技术的不断发展&#xff0c;其在夏季防溺水中的应用也日益凸显出…

Kubernetes 系统监控Metrics Server、HorizontalPodAutoscaler、Prometheus

Metrics Server Linux 系统命令 top 能够实时显示当前系统的 CPU 和内存利用率&#xff0c;它是性能分析和调优的基本工具。 Kubernetes 也提供了类似的命令&#xff0c;就是 kubectl top&#xff0c;不过默认情况下这个命令不会生效&#xff0c;必须要安装一个插件 Metrics …

[图的搜索]5.图解狄克斯特拉算法及其代码演示

狄克斯特拉算法 与前面提到的贝尔曼-福特算法类似&#xff0c;狄克斯特拉&#xff08;Dijkstra&#xff09;算法也是求解最短路径问题的算法&#xff0c;使用它可以求得从起点到终点的路径中权重总和最小的那条路径路径。 图解 01 这里我们设A为起点、G为终点&#xff0c;来讲…

论文笔记:Image Anaimation经典论文-运动关键点模型(Monkey-Net)

Monkey-Net&#xff08;MOviNg KEYpoints&#xff09; paper: https://arxiv.org/pdf/1812.08861, CVPR 2019 code: https://github.com/AliaksandrSiarohin/monkey-net/tree/master 相关工作 视频生成演变过程&#xff1a; spatio-temporal network: 如基于GAN网络的生成模…

探索重庆耶非凡科技:揭秘其背后的技术实力与市场布局

重庆耶非凡科技有限公司&#xff0c;作为重庆当地一家知名的综合性服务型企业&#xff0c;近年来在多个领域取得了显著的成绩。其业务范围广泛&#xff0c;不仅涵盖了传统的行业服务&#xff0c;还积极探索并实践了一系列创新项目&#xff0c;其中最为引人注目的便是选品师项目…

Linux服务器搭建http服务,添加DNS域名解析

效果如下&#xff1a;搭建自己的网站&#xff0c;添加域名解析服务后&#xff0c;外网可访问 1.搭建http服务器&#xff0c;可通过局域网下的ip访问 2.DNS域名解析服务&#xff0c;链接ip到公网&#xff0c;外网可以通过对应的域名访问 1.安装httpd yum install httpd #根据提示…

记录Win11安装打印机驱动过程

1. 首先下载打印机对应型号的驱动 可以从这里下载&#xff1a;打印机驱动,打印机驱动下载 - 打印机驱动网 2. 下载 3. 打开控制面板-->设备和打印机 找到目标打印机添加设备即可 新增打印纸张尺寸

2024年在抖音赚钱,可以不用直播,拍短视频了!

短视频经济发展的越来越快&#xff0c;不少人靠着这次风口&#xff0c;在抖音做直播&#xff0c;拍视频赚到了不少钱。 很多人普通人靠着抖音的流量&#xff0c;一夜之间暴富的案例数不胜数。 像“郭有才”“王妈”就是个明晃晃的例子。 但是很多人都说现在这样的案例越来越…

上海晋名室外危废暂存柜助力谐波传动减速器行业危废品安全储存

近日又有一台 SAVEST 室外危废暂存柜项目成功验收交付使用&#xff0c;此次项目主要用于谐波传动减速器行业危废品安全储存。 用户单位成立于1994年&#xff0c;是我国专业从事谐波传动减速器技术设计、开发、生产、销售、服务的高新技术实业公司。在日常工作运营中涉及到危废…

10.Redis之set类型

谈到一个术语,这个术语很可能有多种含义~~ 1.Set 1) 集合. 2)设置 (和 get 相对应) 集合就是把一些有关联的数据放到一起~~ 1.集合中的元素是无序的! 【此处说的无序和 前面list这里的有序 是对应的, 有序: 顺序很重要. 变换一下顺序, 就是不同的 list 了 无序: 顺序不…

嵌入式几种常用的滤波算法

几种常用的滤波算法 一.修改记录 2024-01-26修改 1.中值滤波负数时失效&#xff0c;补充一下。 二.修改记录 1、限幅消抖滤波法&#xff08;又称程序判断滤波法&#xff09; 2、中位值滤波法 3、算术平均滤波法 4.一阶滞后滤波法 5.加权递推平均滤波法 6.消抖滤波法 …

轻兔推荐 —— MyIP

via&#xff1a;轻兔推荐 简介 一个功能全面的IP工具箱。轻松检查你的 IP&#xff0c;IP 地理位置&#xff0c;检查DNS泄漏&#xff0c;检查 WebRTC 连接&#xff0c;速度测试&#xff0c;ping 测试&#xff0c;MTR测试&#xff0c;检查网站可用性&#xff0c;查询 Whois 信…