L3-010 是否完全二叉搜索树(天梯赛)

二叉树这个数据结构不会写 但是用数组还是能够写出来
这个题最坑点是最后那个判断是否为完全二叉树

我开始一直把完全二叉树的概念搞错了 导致一直wa
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
int n,x,last;
int tr[1000000*4];
void insert(int id,int val){
if(!tr[id]){
tr[id]=val;return ;
}
if(tr[id]<val)
insert(id<<1,val);
else insert(id<<1|1,val);
}
int main(){
cin>>n;
cin>>x;tr[1]=x;
for(int i=2;i<=n;i++)
cin>>x,insert(1,x);
bool falg=1;
for(int i=1;i<=100000*4;i++)
if(tr[i]&&falg)
cout<<tr[i],falg=0;
else if(tr[i]&&!falg)
cout<<" "<<tr[i],last=i;
cout<<endl;
int ii=1;
bool ck=false;
while(ii*2<=last)ii*=2;ii/=2;
for(int i=1;i<=ii-1;i++)
if(!tr[i<<1]||!tr[i<<1|1]){
ck=true;break;
}
if(ck){
cout<<"NO";
return 0;
}
ii*=2;
for(int i=ii+1;i<=2*ii-1;i++)
if(tr[i]&&!tr[i-1])
{
ck=true;break;
}
if(ck){
cout<<"NO";
return 0;
}
cout<<"YES";
return 0;
}

浙公网安备 33010602011771号