L3-010 是否完全二叉搜尋樹(天梯賽)
阿新 • • 發佈:2022-03-30
二叉樹這個資料結構不會寫 但是用陣列還是能夠寫出來
這個題最坑點是最後那個判斷是否為完全二叉樹
我開始一直把完全二叉樹的概念搞錯了 導致一直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; }