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;
}

posted @ 2022-03-30 21:29  wzx_believer  阅读(33)  评论(0)    收藏  举报