PAT 1. 二叉搜索树
原题链接
简单
作者:
流动的音符
,
2024-04-19 10:19:25
,
所有人可见
,
阅读 4
介绍
#pragma GCC optimize(3,"Ofast","inline")
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
#define int long long
#define ld long double
int n,tr[1000100];
int id;
void solve()
{ cin>>n;
while(n--){
int i=1;
int x;cin>>x;
while(tr[i]) {
if(x>tr[i]) i=i*2;//找左子树
else i=i*2+1;//找右子树
}
id=max(id,i);//最大序
tr[i]=x;
}
int ok=0;
for(int i=1;i<=id;i++){
if(tr[i]){
if(i!=1) cout<<" ";
cout<<tr[i];
}
else ok=1;
}
cout<<endl;
if(ok) cout<<"NO";
else cout<<"YES";
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
solve();
return 0;
}