浙大数据结构:04-树6 Complete Binary Search Tree

news2024/9/25 23:19:03
这道题利用了完全二叉树的性质,我也参考了一些代码写的。
(自己一开始写了别的方法,但一直过不了最后一个测试点,红温了)
机翻:

1、条件准备

用vector存输入的数据,另一个数组存输出的结果,n是结点个数,node是指针,指输入数组的下标,这么写是什么意思呢?我们下面接着说。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> a(1010), b(1010);
int n;
int node = 0;
 输入数据和最后的输出数据代码都简单,主要是中间排序和inorder是干什么的不好理解。
我们先分析一下完全二叉树的性质,假设从上到下从左到右给完全二叉搜索树依次标号,根节点为0,那么每一个结点对应的左结点的标号为2*n+1,右结点为2*n+2,n是该结点的标号。
而排序是什么意思呢?我们把输入数据排序后,从小到大依次输出就是该完全二叉搜索树的中序遍历!这个地方自己可以举几个例子推一下。
所以排序后我们已知完全二叉搜索树的中序遍历,我们求它的层序遍历。求法就是利用上述性质,把答案存到该数组中,从前往后输出就是层序遍历的结果。

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  cin >> n;

  for (int i = 0; i < n; i++)
    cin >> a[i];

  sort(a.begin(), a.begin() + n);
  inorder(0);
  int f = 1;
  for (int i = 0; i < n; i++)
  {
    if (f)
    {
      cout << b[i];
      f = 0;
    }
    else
      cout << ' ' << b[i];
  }
}

2、  inorder函数

这个函数其实就是遍历标号,号怎么标的?按刚才所说那样标号。
其实这步就是在找中序遍历的下标,把前面得到的值放进来即可
void inorder(int index)
{
  if (index >= n)
    return;
  inorder(2 * index + 1);
  b[index] = a[node++];
  inorder(2 * index + 2);
}

3、总结

其实这道题这个思路一开始还是蛮难接受的,我也是分析想了好久才大致明白。
总之这个思路对于理解完全二叉搜索树与中序遍历会更加深刻。
完整代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> a(1010), b(1010);
int n;
int node = 0;

void inorder(int index)
{
  if (index >= n)
    return;
  inorder(2 * index + 1);
  b[index] = a[node++];
  inorder(2 * index + 2);
}

int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  cin >> n;

  for (int i = 0; i < n; i++)
    cin >> a[i];

  sort(a.begin(), a.begin() + n);
  inorder(0);
  int f = 1;
  for (int i = 0; i < n; i++)
  {
    if (f)
    {
      cout << b[i];
      f = 0;
    }
    else
      cout << ' ' << b[i];
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (344)-- 算法导论23.2 3题

三、对于稀疏图 G ( V &#xff0c; E ) G(V&#xff0c;E) G(V&#xff0c;E)&#xff0c;这里 ∣ E ∣ Θ ( V ) |E|Θ(V) ∣E∣Θ(V)&#xff0c;使用斐波那契堆实现的Prim算法是否比使用二叉堆实现的算法更快&#xff1f;对于稠密图又如何呢&#xff1f; ∣ E ∣ |E| ∣E…

FPGA技术赋能云数据中心:提高性能与效率

随着现代科技的迅猛发展和大数据时代的推动&#xff0c;云数据中心已成为众多企业的核心基础设施。然而&#xff0c;伴随数据处理需求的不断增长&#xff0c;传统硬件架构在性能、功耗和灵活性方面面临诸多挑战。为了解决这些问题&#xff0c;FPGA&#xff08;现场可编程门阵列…

辽宁汇聚公益慈善力量,绿葆网络助力辽宁绿色生态建设,彰显企业大爱

9月5日&#xff0c;于辽宁省沈阳市隆重举行的“中华慈善日”主题宣传活动暨“山海有情 天辽地宁”即开型福利彩票发行、“生态公益林”项目启动仪式上&#xff0c;广州绿葆网络发展有限公司作为受邀企业之一&#xff0c;积极履行社会责任&#xff0c;向辽宁省慈善联合总会捐赠了…

坐牢第三十六天(QT)

自定义QQ界面 wedget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //qt中信息调试类 #include <QIcon> //图标类 #include <QPushButton>//按钮类 #include <QLabel> //标签类 #include <QMovie> //动图类…

【C++】—— vector 的模拟实现

【C】—— vector 的模拟实现 0 前言1 vector 的成员变量1.1 stl 库中的 vector 成员变量1.2 模拟实现 vector 成员变量 2 迭代器3 size、capacity、empty4 opreator[ ]5 reserve5.1 初版 reserve5.2 _finish 的处理5.3 深拷贝5.4 终版 6 push_back 与 pop_back7 打印函数7.1 初…

打破界限,自闭症寄宿学校带给孩子的改变

在社会的广阔画卷中&#xff0c;有一群特别的孩子&#xff0c;他们以独特的视角感知世界&#xff0c;以非凡的方式表达情感&#xff0c;他们就是自闭症儿童。自闭症&#xff0c;这个听起来略带神秘色彩的词汇&#xff0c;实则承载着无数家庭的期盼与挑战。在这片充满爱的土地上…

【北京迅为】《STM32MP157开发板使用手册》-第十六章 Buildroot制作根文件系统

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

丰巢“闯关”港交所上市

社区中随处可见的智能快递柜&#xff0c;即将捧出一个IPO。 近日&#xff0c;丰巢控股有限公司&#xff08;下称“丰巢控股”或“丰巢”&#xff09;正式向港交所递交了招股书&#xff0c;华泰国际担任其独家保荐人。这将是继顺丰控股、顺丰房托、嘉里物流、顺丰同城之后&…

【Qt笔记】QGroupBox控件详解

目录 引言 一、基本属性 二、常用方法 2.1 构造函数 2.2 设置标题 2.3 设置复选框模式 2.4 是否被选中 2.5 设置对齐方式 2.6 设置扁平化样式 三、信号与槽机制 四、样式定制 五、应用示例 5.1 代码 5.2 代码解析 5.3 实现效果 结语 引言 QGroupBox 是 Qt…

检查iOS多语系文件内容检查iOS多语系文件内容

在iOS中&#xff0c;检查多语言文件&#xff08;如 .strings 文件&#xff09;内容的命令通常使用 plutil 工具。你可以通过终端执行以下命令来检查 .strings 文件的格式和内容&#xff1a; plutil -lint path/to/your/Localizable.strings 这个命令会验证指定的 .strings 文…

C语言13--结构体

结构体基本概念 C语言提供了众多的基本类型&#xff0c;但现实生活中的对象一般都不是单纯的整型、浮点型或字符串&#xff0c;而是这些基本类型的综合体。比如一个学生&#xff0c;典型地应该拥有学号&#xff08;整型&#xff09;、姓名&#xff08;字符串&#xff09;、分数…

已配置好的Linux CentOS7虚拟机转换为可视化界面问题

一、发现问题 学习过程中发现可视化界面比较有意思&#xff0c;就想尝试搞一下看看&#xff0c;于是去网站上搜索&#xff0c;看到的一些是在新建虚拟机的时候进行设置的&#xff0c;我尝试跟着步骤去搞&#xff0c;发现其中最关键的一步&#xff0c;软件选择中&#xff0c;没有…

【北京迅为】《STM32MP157开发板使用手册》- 第十五章 制作最小linux系统

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

TikTok内容电商:短视频与直播带货如何重塑消费者购物决策

数字化时代&#xff0c;内容电商已经成为一种重要的商业模式。而TikTok作为全球领先的短视频平台&#xff0c;其内容电商模式正慢慢改变用户的消费习惯。TikTok Shop作为TikTok平台上的电商板块&#xff0c;也凭借其独特的短视频和直播带货模式&#xff0c;影响着消费者的购物决…

百度MEG数据开发治理平台-TDS

导读 百度MEG的上一代大数据产品存在平台分散、质量不均和易用性差等问题&#xff0c;导致开发效率低下、学习成本高&#xff0c;业务需求响应迟缓。为了解决这些问题&#xff0c;百度MEG内部开发了图灵3.0生态系统。图灵3.0覆盖了数据全生命周期&#xff0c;包括Turing Data …

AI在医学领域:HMARL首个多器官诊断AI框架

多器官疾病因其对多个器官系统的同时影响而带来了显著的挑战&#xff0c;这需要复杂和适应性的治疗策略。尽管在人工智能驱动的医疗决策支持系统方面取得了最新进展&#xff0c;但现有的解决方案通常限于单个器官系统。它们往往忽视了器官系统之间复杂的相互依赖性&#xff0c;…

搜维尔科技:SenseGlove触觉反馈数据手套为人形机器人遥操作提供精确的控制和交互方案

SenseGlove触觉反馈数据手套 使用市场上唯一一款结合力反馈、振动触觉反馈和运动捕捉以及紧凑无线设计的触觉手套来收集数据。 遥操作机器人 远程机器人向人类提供触觉反馈&#xff0c;提供更强的真实感和更高的性能&#xff0c;以及安全性和控制力。远程机器人的 SenseGlov…

适用于BLE室内定位系统的自适应路径损耗模型

自适应路径损耗模型(ADAM):提升BLE室内定位精度的创新方法 室内定位系统(IPS)在物联网、智慧城市等领域中扮演着至关重要的角色。然而,由于室内环境的复杂性(如信号多径效应、障碍物等),传统的定位方法往往面临精度不足的问题。本文介绍了一种新颖的模型——ADAM(Ad…

【毕设项目五】基于SpringBoot+VUE的公共卫生教育与宣传系统

基于SpringBootVUE的公共卫生教育与宣传系统 项目介绍 系统有两种角色&#xff1a;管理员和普通用户。 &#xff08;1&#xff09;健康教育资源 &#xff08;2&#xff09;活动管理 &#xff08;3&#xff09;反馈与建议 &#xff08;4&#xff09;用户管理 管理员实现功…

快速上手指南:在Windows系统中下载Ollama,一键启动大模型体验!

1. 下载ollama 官网下载安装&#xff1a; ollama.com 2. 拉取大模型 llama 3.1 终端中输入 ollama pull llama3.1&#xff0c;等待安装 3. 运行 llama3.1 ollama run llama3.1接下来就可以和模型对话了 退出 /bye运行 /? 查看更多聊天中命令 其他 ollama github&#x…