1099 Build A Binary Search Tree(超详细注解+38行代码)

分数 30

全屏浏览题目

作者 CHEN, Yue

单位 浙江大学

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
  • Both the left and right subtrees must also be binary search trees.

Given the structure of a binary tree and a sequence of distinct integer keys, there is only one way to fill these keys into the tree so that the resulting tree satisfies the definition of a BST. You are supposed to output the level order traversal sequence of that tree. The sample is illustrated by Figure 1 and 2.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤100) which is the total number of nodes in the tree. The next N lines each contains the left and the right children of a node in the format left_index right_index, provided that the nodes are numbered from 0 to N−1, and 0 is always the root. If one child is missing, then −1 will represent the NULL child pointer. Finally N distinct integer keys are given in the last line.

Output Specification:

For each test case, print in one line the level order traversal sequence of that tree. All the numbers must be separated by a space, with no extra space at the end of the line.

Sample Input:

9
1 6
2 3
-1 -1
-1 4
5 -1
-1 -1
7 -1
-1 8
-1 -1
73 45 11 58 82 25 67 38 42

Sample Output:

58 25 82 11 38 67 45 73 42

代码长度限制

16 KB

时间限制

200 ms

内存限制

64 MB

#include<bits/stdc++.h>
using namespace std;
const int N=105; 
int l[N],r[N];//分别保存当前结点的左右孩子结点 
int a[N],res[N];//a[N]保存中序序列的值,res[N]保存每个结点对应的值 
void inorder(int root,int &k){//中序遍历结点并将中序序列按顺序填入各节点 
    if(l[root]!=-1)inorder(l[root],k);//若有左孩子,递归遍历 
    res[root]=a[k++];//将值保存在对应结点的位置 
    if(r[root]!=-1)inorder(r[root],k);//若有有孩子,递归遍历 
    return ;    
}
void levelorder(int root){//层序遍历 
    queue<int>q;
    q.push(root);//根结点入队 
    while(q.size()){//队列中有元素 
        int f=q.front();//获得队头元素 
        q.pop();//出队 
        if(l[f]!=-1)q.push(l[f]);//若队头结点有左孩子,则将左孩子入队 
        if(r[f]!=-1)q.push(r[f]);//若队头结点有右孩子,则将右孩子入队
        cout<<res[f];//输出队头结点对应的值 
        if(q.size())cout<<' ';//若队列还有元素输出空格,最后一个元素不用输出 
    }
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){//从第0个结点到第n-1个结点,保存各结点的左右孩子结点 
        int lchild,rchild;
        cin>>lchild>>rchild;
        l[i]=lchild,r[i]=rchild;
    }
    for(int i=0;i<n;i++)cin>>a[i];//输入给定初始序列 
    sort(a,a+n);//从小到大排序,即中序序列 
    int k=0;//用于记录当前的结点 
    inorder(0,k);//0表示根结点 
    levelorder(0);//层序遍历 
    return 0;
}

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

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

相关文章

使用云服务器可以做什么?十大使用场景举例说明

使用阿里云服务器可以做什么&#xff1f;阿里云百科分享使用阿里云服务器常用的十大使用场景&#xff0c;说是十大场景实际上用途有很多&#xff0c;阿里云百科分享常见的云服务器使用场景&#xff0c;如本地搭建ChatGPT、个人网站或博客、运维测试、学习Linux、跑Python、小程…

详解c++STL—string组件

目录 一、string基本概念 1、本质 2、string和char * 区别&#xff1a; 3、特点&#xff1a; 二、string构造函数 1、构造函数原型 2、示例 三、string赋值操作 1、赋值的函数原型 2、示例 四、string字符串拼接 1、函数原型 2、示例 五、string查找和替换 1、功…

2023系统分析师---软件工程、系统规划高频错题

系统规划---成本效益分析 评价信息系统经济效益常用的方法主要有成本效益分析法,投入产出分析法和价值工程方法。盈亏平衡法常用于销售定价; 可行性分析 系统规划是信息系统生命周期的第一个阶段,其任务是对企业的环境、目标以及现有系统的状况进行初步调查,根据企业目标…

【利用AI让知识体系化】万字深入浅出Nginx

思维导图 文章目录 思维导图 第一部分&#xff1a;入门篇1.1 起步下载和安装Nginx启动NginxNginx配置文件Nginx命令行总结 1.2 Nginx的基本架构1.3 安装和配置Nginx1.4 Nginx的基本操作 第二部分&#xff1a;核心篇2.1 Nginx的请求处理2.2 Nginx的缓存机制2.3 Nginx的负载均衡机…

题解校验码—CRC循环校验码与海明校验码

码距 一个编码系统的码距是任意两个码字的最小距离。 例如个编码系统采用三位长度的二进制编码&#xff0c;若该系统有四种编码分别为&#xff1a;000&#xff0c;011&#xff0c;100&#xff0c;111&#xff0c;此编码系统中000与111的码距为3&#xff1b;011与000的码距为2…

Hard Patches Mining for Masked Image Modeling

摘要 蒙面图像建模&#xff08;MIM&#xff09;因其在学习可伸缩视觉表示方面的潜力而引起了广泛的研究关注。在典型的方法中&#xff0c;模型通常侧重于预测掩码补丁的特定内容&#xff0c;并且它们的性能与预定义的掩码策略高度相关。直观地说&#xff0c;这个过程可以被看作…

WiFi(Wireless Fidelity)基础(九)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

【GAMES101】作业2学习总结

本系列博客为记录笔者在学习GAMES101课程时遇到的问题与思考。 GAMES101&#xff1a;课程官网GAMES101&#xff1a;B站视频GAMES101&#xff1a;相关文件下载(百度网盘) 一、基础题 本次作业的目的是为了让我们熟悉三角形栅格化的相关操作&#xff0c;通过Assignment2.pdf可以…

白嫖chatgpt的Edge插件,很难不爱啊

目录 &#x1f341;1.常见的Edge浏览器界面 &#x1f341;二.安装WebTab插件 &#x1f341;三.WebTab插件的各种功能 &#x1f341;1.支持免费的chatgpt&#xff0c;不限次数​编辑 &#x1f341;2.有几个休闲的小游戏可以玩耍&#xff0c;点击即玩。 &#x1f341;3.支…

618前夕,淘宝天猫大变革,探索电商天花板之上的价值

2023年淘宝天猫618商家大会&#xff0c;恰逢淘宝20周年&#xff0c;也是阿里“16N”组织架构改革&#xff0c;淘宝天猫“独立”经营后&#xff0c;管理和运营团队的首次亮相。除了淘宝天猫618的具体策略&#xff0c;最受关注的&#xff0c;还有淘宝天猫的大变革——涉及淘宝天猫…

AD9680+JESD204B接口+FPGA FMC高速率数据采集板卡

板卡概述&#xff1a; 【FMC_XM155】 FMC_XM155 是一款基于 VITA57.1 标准的&#xff0c;实现 2 路 14-bit、500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。 该模块遵循 VITA57.1 规范&#xff0c;可直接与 FPGA 载卡配合使用&#xff0c;板 卡 ADC 器件采用…

CN学术期刊《西部素质教育》简介及投稿邮箱

《西部素质教育》&#xff08;半月刊&#xff09;创刊于2015年&#xff0c;是由青海人民出版社有限责任公司主管/主办的教育类学术期刊&#xff0c;本刊恪守“追踪教育研究前沿&#xff0c;关注教育实践热点&#xff0c;探索创新教育理念&#xff0c;传播教育教学信息&#xff…

Linux相关问题

中英文切换 super空格切换中英文&#xff1b;super指键盘上的Win键&#xff1b; 开机自启动服务设置 可视化方式&#xff1a;输入setup命令进入自启动服务配置&#xff1b;通过上下键选中服务&#xff0c;通过空格选择是否自启动该服务&#xff1b; 开启不同的终端 CTRLALT…

audioop.rms函数解读和代码例子

该audioop模块包含对声音片段的一些有用操作。它对由8,16或32位宽的有符号整数样本组成的声音片段进行操作&#xff0c;并以Python字符串存储。这与al和sunaudiodev模块使用的格式相同。所有标量项都是整数&#xff0c;除非另有规定。 audioop.rms 即 sqrt(sum(S_i^2)/n) 这个公…

10个你从未想过的 ChatGPT 有趣用途

这篇文章向我们展示了ChatGPT的有趣用途&#xff0c;如创作独特的故事、写作协助、模拟对话和游戏等。这些应用展示了ChatGPT的强大功能和灵活性。通过这些有趣的例子&#xff0c;我们可以看到ChatGPT作为一种人工智能技术在生活中的实际应用和潜力。无论是娱乐还是实用&#x…

我和C++的故事---第一次见面.

&#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f3e0;学习社区&#xff1a;夏目友人帐. 文章目录 前言一、第一个C程序二、C 关键字(C98)三、命名空间1、命名空间的定义2、命名空间的使用3、命名空间的三种展开方式 四、C输入&&输出&&换行1、…

三极管的几点应用

三极管有三个工作状态&#xff1a;截止、放大、饱和&#xff0c;放大状态很有学问也很复杂&#xff0c;多用于集成芯片&#xff0c;比如运放&#xff0c;现在不讨论。其实&#xff0c;对信号的放大&#xff0c;我们通常用运放处理&#xff0c;三极管更多的是当做一个开关管来使…

蚁群算法ACS处理旅行商问题TSP【Java实现】

1. 介绍 蚁群算法是一种群体智能算法&#xff0c;模拟了蚂蚁寻找食物时的行为&#xff0c;通过蚂蚁之间的信息交流和合作&#xff0c;最终实现全局最优解的寻找【是否找得到和迭代次数有关】。 蚁群算法的基本思想是将搜索空间看作一个由节点组成的图&#xff0c;每个节点代表…

【软件开发】Memcached(理论篇)

Memcached&#xff08;理论篇&#xff09; 1.Memcached 简介 Memcached 是一个开源的&#xff0c;支持高性能&#xff0c;高并发的分布式内存缓存系统&#xff0c;由 C 语言编写&#xff0c;总共 2000 多行代码。从软件名称上看&#xff0c;前 3 个字符 Mem 就是内存的意思&am…

港科夜闻|香港科大与香港科大(广州)管理层联席会议顺利召开

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与香港科大(广州)管理层联席会议顺利召开。这是自内地和香港全面恢复通关以来&#xff0c;两校的高级管理团队首次举行线下的联席会议&#xff0c;面对面交流、讨论有关两校协同发展的重要议题。两校持续深入推进…