1064 Complete Binary Search Tree(19行代码+详细注释)

news/2024/11/7 1:30:58/

分数 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.

A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.

Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer N (≤1000). Then N distinct non-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000.

Output Specification:

For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.

Sample Input:

10
1 2 3 4 5 6 7 8 9 0

Sample Output:

6 3 8 1 5 7 9 0 2 4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n,a[N],res[N];//分别保存输入和输出的序列 
void inorder(int u,int &cur){
    if(2*u<=n)inorder(2*u,cur);//若有左子树则递归遍历左子树 
    res[u]=a[cur++];//找到左子树的第一个结点并保存中序序列的当前值,之后再指向当前元素的下一个元素 
    if(2*u+1<=n)inorder(2*u+1,cur);//若有右子树则递归遍历右子树 
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++)cin>>a[i];//输入 
    sort(a,a+n);//从小到大排序,即为二叉搜索树的中序遍历 
    int cur=0;//用于保存结果序列,从0到n-1 
    inorder(1,cur);//中序遍历完全二叉树,并按照中序序列插入元素,最后所得就是完全二叉搜索树 
    cout<<res[1]; //单独输出第一个元素 
    for(int i=2;i<=n;i++)cout<<' '<<res[i];//从第二开始输出空格+元素 
    return 0;
}


http://www.ppmy.cn/news/68038.html

相关文章

【pandas的dataframe过滤数据方法】

选取某一列中大于某个值的行&#xff1a; df[df[column_name] > value]选取某一列中满足多个条件的行&#xff1a; df[(df[column_name] > value1) & (df[column_name] < value2)]选取某一列中不等于某个值的行&#xff1a; df[df[column_name] ! value]选取某…

linux环境安装使用tomcat详解

01-安装Tomcat # 0.下载tomcat http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.46/bin/apache-tomcat-8.5.46.tar.gz # 1.通过工具上传到Linux系统中 # 2.解压缩到/usr目录中 [rootlocalhost ~]# tar -zxvf apache-tomcat-8.5.46.tar.gz -C /usr/ -C 用来指…

Android Studio中android: baselineAligned属性认识及用途

文章目录 使用Button控件来演示使用TextView控件来演示 android:baselineAligned 设置子元素都按照基线对齐&#xff0c;默认是true 使用Button控件来演示 在项目中经常使用layout_weight属性利用比重来设置控件的大小&#xff0c;代码如下&#xff1a; <?xml version&qu…

涉及lvm分区的命令使用

pv命令 pvdisplay #查看物理卷 pvcreate 分区路径 #创建物理卷 pvremove 分区路径 #删除物理卷 vg命令 vgdisplay #查看卷组 vgcreate 卷组名称 #创建卷组 vgextend 卷组名称 分区路径 #将分区加入某个卷组 vgremove 卷组名称 #删…

【文本三剑客】AWK

AWK 一、AWK的工作原理1.1命令格式1.2awk常见的内建变量 二、awk实验2.1按行输入文本2.2按字段输出文本2.3通过管道符、双引号调用shell命令 一、AWK的工作原理 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&…

python队列

简介 使用队列方法进行多线程之间的信息交互 队列 队列 First in First out可以存储不同的数据类型&#xff0c;例如整数、字符串、字典使用put放数据使用get取数据&#xff08;如果当前队列中没有数据&#xff0c;此时会堵塞&#xff09; import queueq queue.Queue() q.…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(I.MX6U驱动GPIO中断《包括时钟讲解》) 2023.5.9

目录 前言整体文件结构源码分析&#xff08;保姆级讲解&#xff09;中断初始化部分初始化GIC控制器初始化中断向量表设置中断向量表偏移 系统时钟初始化部分使能所有的时钟部分led初始化部分beep初始化部分key初始化部分按键中断初始化部分按键中断服务函数部分 while循环部分 …

【啃书C++Primer5】-c++有些理论基础需要了解,墙裂建议看看原书,有太多细节需要注意了

任何常用的编程语言都具备一组公共的语法特征&#xff0c;不同语言仅在特征的细节上有所区别。要想学习并掌握–种编程语言&#xff0c;理解其语法特征的实现细节是第一步。最基本的特征包括: 整型、字符型等内置类型变量&#xff0c;用来为对象命名 表达式和语句&#xff0c;…