1. 程式人生 > 其它 >L3-010 是否完全二叉搜尋樹(天梯賽)

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