C++二叉树一(练习题)
二叉树的深度-层序遍历法【描述】给定一棵二叉树 要求用层序遍历的方式求该二叉树的深度。二叉树深度的定义 从根结点到最远叶结点依次经过的结点个数含根、叶结点。【输入描述】第一行是一个整数 n 表示二叉树的结点个数。 二叉树结点编号从 1到 n 根结点为 1 n 10 。接下来有 n 行 依次对应二叉树的 n 个结点。 每行有两个整数 分别表示该结点的左儿子和右儿子的结点编号。 如果第一个第二个 数为-1 则表示没有左右 儿子。【输出描述】输出一个整型数 表示树的深度。【输入样例】32 3-1 -1-1 -1【输出样例】2【输入样例】72 73 64 5-1 -1-1 -1-1 -1-1 -1【输出样例】4#includeiostream#includequeueusingnamespacestd;structtree_node{intls,rs;//ls:左孩子结点编号rs右孩子结点编号intdepth;//深度};tree_node tree[11];queueintq;// 为了节约空间队列中只保存树的编号intn;intans;//深度最大值voidbfs(){// 根结点编号1入队tree[1].depth1;q.push(1);while(!q.empty()){intidq.front();q.pop();intdepthtree[id].depth;ansmax(ans,depth);//更新深度最大值// 先左后右子结点编号入队if(tree[id].ls!-1){tree[tree[id].ls].depthdepth1;//设置左子节点的深度q.push(tree[id].ls);}if(tree[id].rs!-1){tree[tree[id].rs].depthdepth1;//设置右子节点的深度q.push(tree[id].rs);}}}intmain(){// 读入和保存树cinn;for(inti1;in;i)cintree[i].lstree[i].rs;// 从根结点开始层序遍历bfs();// 输出coutansendl;return0;}/* 本题测试点 【样例输入1】 1 -1 -1 【样例输出1】 1 【样例输入2】 7 2 3 4 5 6 7 -1 -1 -1 -1 -1 -1 -1 -1 【样例输出2】 3 【样例输入3】 4 2 -1 3 -1 4 -1 -1 -1 【样例输出3】 4 【样例输入4】 6 2 3 4 5 -1 -1 6 -1 -1 -1 -1 -1 【样例输出4】 4 【样例输入5】 4 -1 2 -1 3 -1 4 -1 -1 【样例输出5】 4 */GESP202406 六级第二题 【二叉树】【描述】小杨有一棵包含几个节点的二叉树且根节点的编号为1。这棵二叉树任意一个节点要么是白色要么是黑色。之后小杨会对这棵二叉树进行q次操作每次小杨会选择一个节点将以这个节点为根的子树内所有节点的颜色反转,即黑色变成白色白色变成黑色。小杨想知道q次操作全部完成之后每个节点的颜色。【输入描述】第一行一个正整数n表示二叉树的节点数量。第二行n-1个正整数第i(1in-1)个数表示编号为i1的节点的父亲节点编号数据保证是一棵二叉树。第三行一个长度为n的01串从左到右第i(1≤in)位如果为0表示编号为i的节点颜色为白色否则为黑色。第四行一个正整数q表示操作次数。接下来q行每行一个正整数 a_i(1a_i≤n)表示第i次操作选择的节点编号。【输出描述】输出一行一个长度为n的 01串表示q次操作全部完成之后每个节点的颜色。从左到右第i(1i≤n)位如果为0表示编号为i的节点颜色为白色否则为黑色。【输入样例】63 1 1 3 41001013132【输出样例】010000#includeiostreamusingnamespacestd;#defineLEN100000structtree_node{intson[2];//子结点编号intvalue;};tree_node tree[LEN];intn,times;chartmp[LEN];//操作以rootid为根的所有结点值翻转voidprocess(introotid){if(rootid0)return;//空节点不处理tree[rootid].value1-tree[rootid].value;//0-1,1-0process(tree[rootid].son[0]);process(tree[rootid].son[1]);}intmain(){// 读入和保存树cinn;for(inti1;in-1;i){intid;cinid;if(tree[id].son[0]0)tree[id].son[0]i1;elsetree[id].son[1]i1;}cintmp;for(inti0;in;i){tree[i1].valuetmp[i]-0;}cintimes;//操作次数for(inti1;itimes;i){intid;cinid;process(id);}//输出for(inti1;in;i){couttree[i].value;}return0;}/* 本题测试点 【样例输入1】 6 3 1 1 3 4 100101 3 1 3 2 【样例输出1】 010000 【样例输入2】 4 1 2 3 0000 3 1 2 1 【样例输出2】 0111 【样例输入3】 7 1 1 2 2 3 3 1111111 2 2 3 【样例输出3】 1000000 【样例输入4】 1 0 2 1 1 【样例输出4】 0 */二叉树的宽度【描述】给定一棵二叉树 求该二叉树的宽度。二叉树宽度的定义 是指具有节点数目最多的那一层的节点个数即所有层中节点数的最大值。【输入描述】第一行是一个整数 n 表示二叉树的结点个数。 二叉树结点编号从 1到 n 根结点为 1 n 10 。接下来有 n 行 依次对应二叉树的 n 个结点。每行有两个整数 分别表示该结点的左儿子和右儿子的结点编号。 如果第一个第二个 数为-1 则表示没有左右儿子。【输出描述】输出一个整型数 表示树的宽度。【输入样例】32 3-1 -1-1 -1【输出样例】2【输入样例】72 73 64 5-1 -1-1 -1-1 -1-1 -1【输出样例】2【提示】使用队列逐层遍历统计每层节点数最大值就是树的宽度。#includeiostream#includequeueusingnamespacestd;structtree_node{intls,rs;//ls:左孩子结点编号rs右孩子结点编号intdepth;//深度 即层号};tree_node tree[11];queueintq;// 为了节约空间队列中只保存树的编号intn;intwidth[11];// 层宽度数组第i层宽度width[i]voidbfs(){// 根结点编号1入队tree[1].depth1;//根节点在第1层q.push(1);while(!q.empty()){intidq.front();q.pop();//按层统计宽度intdepthtree[id].depth;width[depth];// 先左后右非空子结点编号入队if(tree[id].ls!-1){tree[tree[id].ls].depthdepth1;//设置左子节点的深度q.push(tree[id].ls);}if(tree[id].rs!-1){tree[tree[id].rs].depthdepth1;//设置右子节点的深度q.push(tree[id].rs);}}}intmain(){// 读入和保存树cinn;for(inti1;in;i)cintree[i].lstree[i].rs;// 从根结点开始层序遍历bfs();// 找到宽度最大值并输出intmax_width0;for(inti1;in;i)max_widthmax(max_width,width[i]);coutmax_widthendl;return0;}/* 本题测试点 【样例输入1】 1 -1 -1 【样例输出1】 1 【样例输入2】 7 2 3 4 5 6 7 -1 -1 -1 -1 -1 -1 -1 -1 【样例输出2】 4 【样例输入3】 4 2 -1 3 -1 4 -1 -1 -1 【样例输出3】 1 【样例输入4】 4 -1 2 -1 3 -1 4 -1 -1 【样例输出4】 1 【样例输入5】 6 2 3 4 5 6 -1 -1 -1 -1 -1 -1 -1 【样例输出5】 3 */二叉树的权值【描述】给定一棵包含 N 个节点的完全二叉树树上每个节点都有一个权值按从上到下、从左到右的顺序依次是 A1,A2,…,AN如下图所示:现在小明要把相同深度的节点的权值加在一起他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大请你输出其中最小的深度。注:根的深度是 1。【输入描述】第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,…,AN。【输出描述】输出一个整数代表答案。【输入样例】71 6 5 4 3 2 1【输出样例】2对于所有评测用例1≤ N 10^5,0 |Ai| 10^5【提示】完全二叉树的第k层有2^k个结点(第一层k0)因此可以通过计数的方式在枚举数组的同时分别累计每个深度的结点数量。一旦某一层累加的结点数足够了就记录并比较大小然后初始化各个数据重新再累加计算。#includeiostream#includecmathusingnamespacestd;intmain(){intn;cinn;intcnt0,k0,sum0,ans0,ans20;//cnt计数k控制每一层是2的几次方个sum求和ans1记录最大值ans2记录深度for(inti0;in;i){intx;cinx;cnt;sumx;if(cntpow(2,i)||in-1){//计数2^k个或者累加到了最后一个结点cnt0;k;if(sumans){anssum;ans2k;}sum0;}}coutans2endl;return0;}/* 本题测试点 【样例输入1】 1 5 【样例输出1】 1 【样例输入2】 2 3 4 【样例输出2】 2 【样例输入3】 3 1 2 3 【样例输出3】 2 【样例输入4】 5 1 1 1 5 5 【样例输出4】 3 【样例输入5】 3 4 5 6 【样例输出5】 2 */

相关新闻

STM32CubeMX配置LTDC

STM32CubeMX配置LTDC

如何解决这个问题,求助大佬

2026/9/16 21:43:45 阅读更多 →
【软考】2021年信息安全工程师案例分析真题与答案完整版(下午案例分析题)

【软考】2021年信息安全工程师案例分析真题与答案完整版(下午案例分析题)

**2021年信息安全工程师案例分析真题与答案完整版(下午题)**1、试题一(共20分)阅读下列说明和图,回答问题1至问题5,将解答填入答题纸的对应栏内。 【说明】在某政府单位信息中心工作的李工要负责网站的设计…

2026/9/10 22:01:26 阅读更多 →
Windows平台Makefile构建指南:MSYS2、NMake与WSL三种方案详解

Windows平台Makefile构建指南:MSYS2、NMake与WSL三种方案详解

1. 为什么在Windows上折腾Makefile是个技术活如果你是从Linux或macOS转战Windows的开发者,第一次在Windows上尝试运行一个开源项目的make命令时,大概率会收获一个冰冷的错误提示:“‘make’不是内部或外部命令,也不是可运行的程序…

2026/9/24 13:37:15 阅读更多 →

最新新闻

卡车倾倒建筑垃圾检测数据集:从视频流到行为识别的落地拆解

卡车倾倒建筑垃圾检测数据集:从视频流到行为识别的落地拆解

简介:这是一份面向计算机视觉与深度学习方向的目标检测数据集,聚焦卡车倾倒建筑垃圾这一特定行为识别任务,适合训练和评估YOLOv7等实时检测模型,可服务于城市监控、建筑工地管理与环保监测等场景。压缩包共1023个文件,…

2026/9/24 19:32:03 阅读更多 →
心脏病预测机器学习实战:11个脚本从数据清洗到XGBoost调参

心脏病预测机器学习实战:11个脚本从数据清洗到XGBoost调参

简介:这份资源面向机器学习入门与进阶学习者,提供一套完整的心脏病数据集分析与预测实战案例,帮助读者掌握从数据清洗、特征工程到多模型对比的完整流程。包内共14个文件,以11个Python源代码为主,另含2个CSV数据集和1个…

2026/9/24 19:32:03 阅读更多 →
基于销量可视化的手机价位段智能选型平台

基于销量可视化的手机价位段智能选型平台

开头做手机选品或者门店铺货的朋友,应该都有过这种纠结:同一批预算,到底是多进几台千元机走量,还是押两三部旗舰机赚毛利?以前大家基本靠经验和感觉,但感觉这东西在行情波动面前特别不靠谱。我去年接手了一…

2026/9/24 19:32:03 阅读更多 →
东华OJ刷题复盘:从TLE到AC,避开多组输入与边界陷阱

东华OJ刷题复盘:从TLE到AC,避开多组输入与边界陷阱

连着刷了三个晚上,东华OJ的基础练习终于推进到了第7到第9题。说实话,这三道题单独拎出来都不算难,但它们卡我的时间和心态,比后面那些看起来更复杂的题还要狠。第7题让我第一次在OJ上感受到“Time Limit Exceeded”的分量&#xf…

2026/9/24 19:32:03 阅读更多 →
SAP选择性数据迁移实施商选型:2026年避坑指南

SAP选择性数据迁移实施商选型:2026年避坑指南

2026年,很多SAP老客户心里都装着一件事:ECC到底什么时候迁,怎么迁。而在这个大问题下面,真正让人头疼的其实是另一个更具体的问题——选择性数据迁移,到底该选哪家SAP实施商来干。先别急着谈价格、谈人天,我…

2026/9/24 19:32:03 阅读更多 →
MySQL用户管理与权限设置实战:从GRANT到远程连接排查

MySQL用户管理与权限设置实战:从GRANT到远程连接排查

接手过不少MySQL环境,也帮人排查过很多数据库问题,发现真正让运维和开发头疼的,往往不是SQL写得不好,而是用户管理和权限设置这块没搞清爽。尤其是线上环境,账号多了、权限乱了,要么是开发抱怨连不上库&…

2026/9/24 19:31:02 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →