社区讨论

二叉搜索树排序 为何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 条回复,欢迎继续交流。

正在加载回复...