社区讨论
二叉搜索树排序 为何TLE
P1177【模板】排序参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lrapikcu
- 此快照首次捕获于
- 2024/01/12 22:01 2 年前
- 此快照最后确认于
- 2024/01/13 10:26 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
const int NIL = -1;
const int ROOT = 1;
int n,a[N];
inline int read(){
int x=1,y=0;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
x=-1;
ch=getchar();
}
}
while(ch>='0'&&ch<='9'){
y=y*10+ch-'0';
ch=getchar();
}
return x*y;
}
inline void write(int n){
if(n<0) putchar('-'),n*=-1;
if(n>9) write(n/10);
putchar(n%10+'0');
}
struct node{
int left,right,parent,data;
}q[N];
void TREE_INSERT(int num){//lgn
int now=ROOT,pre;
while(now!=NIL){
pre=now;
if(a[num]<=a[now]){
now=q[now].left;
}else{
now=q[now].right;
}
}
if(a[num]<=a[pre]){
q[pre].left=num;
q[num].left=NIL;
q[num].right=NIL;
q[num].parent=pre;
q[num].data=a[num];
}else{
q[pre].right=num;
q[num].right=NIL;
q[num].left=NIL;
q[num].parent=pre;
q[num].data=a[num];
}
}
void TREE_MIDDLE_PRINT(int x){//中序遍历出从小到大的排序
if(x!=NIL){
TREE_MIDDLE_PRINT(q[x].left);
write(q[x].data);
cout<<" ";
TREE_MIDDLE_PRINT(q[x].right);
}
}
int main(){
n=read();
a[1]=read();
q[1].data=a[1];
q[1].left=NIL;
q[1].right=NIL;
q[1].parent=NIL;
for(int i=2;i<=n;i++){
a[i]=read();
TREE_INSERT(i);//nlgn
}
TREE_MIDDLE_PRINT(ROOT);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...