团体程序设计天体赛(L3-010 是否完全二叉搜索树 (30 分))
题目:

思路分析:
可以通过数组来模拟建树过程
也可以‘真实‘建树
判断是否为完全二叉树 只需要判断点的个数是否==n
代码实现:
1 const int MAX=1000010; 2 struct node{ 3 node *l,*r; 4 int data; 5 }; 6 int n; 7 node *insert(node *root,int x){ 8 if(root==NULL){ 9 root=new node; 10 root->data=x; 11 root->l=root->r=NULL; 12 return root; 13 } 14 else{ 15 if(root->data>x){ 16 root->r=insert(root->r,x); 17 } 18 else root->l=insert(root->l,x); 19 } 20 return root; 21 } 22 void print_ch(node *root){ 23 queue<node*>qu; 24 25 if(root){ 26 cout<<root->data; 27 qu.push(root); 28 } 29 while (!qu.empty()) { 30 node *now=qu.front(); 31 qu.pop(); 32 if(now->l){ 33 cout<<" "<<now->l->data; 34 qu.push(now->l); 35 } 36 if(now->r){ 37 cout<<" "<<now->r->data; 38 qu.push(now->r); 39 } 40 } 41 } 42 void check(node *root){ 43 queue<node*>qu; 44 qu.push(root); 45 int num=0; 46 while (qu.front()!=NULL) { 47 node *now=qu.front(); 48 qu.pop(); 49 qu.push(now->l); 50 qu.push(now->r); 51 num++; 52 } 53 if(n==num)cout<<"YES"; 54 else cout<<"NO"; 55 } 56 int main(){ 57 cin>>n; 58 node *root=NULL; 59 for(int i=0;i<n;i++){ 60 int x; 61 cin>>x; 62 root=insert(root,x); 63 } 64 print_ch(root); 65 cout<<endl; 66 check(root); 67 }
/*
*@Author: GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
/*
* __----~~~~~~~~~~~------___
* . . ~~//====...... __--~ ~~
* -. \_|// |||\\ ~~~~~~::::... /~
* ___-==_ _-~o~ \/ ||| \\ _/~~-
* __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~
* _-~~ .=~ | \\-_ '-~7 /- / || \ /
* .~ .~ | \\ -_ / /- / || \ /
* / ____ / | \\ ~-_/ /|- _/ .|| \ /
* |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\
* ' ~-| /| |-~\~~ __--~~
* |-~~-_/ | | ~\_ _-~ /\
* / \ \__ \/~ \__
* _--~ _/ | .-~~____--~-/ ~~==.
* ((->/~ '.|||' -_| ~~-/ , . _||
* -_ ~\ ~~---l__i__i__i--~~_/
* _-~-__ ~) \--______________--~~
* //.-~~~-~_--~- |-------~~~~~~~~
* //.-~~~--\
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* 神兽保佑 永无BUG
*/
const int MAX=10001;
int a[MAX];
void built(int pos,int x){
if(a[pos]==-1){
a[pos]=x;
return;
}
if(x>a[pos]){
built(pos*2,x);
}
else{
built(pos*2+1,x);
}
}
int main(){
int n;
cin>>n;
mms(a,-1);
for(int i=0;i<n;i++){
int x;
cin>>x;
built(1,x);
}
int pos=1;
int t=0;
while (t<n) {
while (a[pos]==-1) {
pos++;
}
if(pos==1) cout<<a[pos++];
else cout<<" "<<a[pos++];
t++;
}
cout<<endl;
if(n+1==pos){
cout<<"YES";
}
else cout<<"NO"<<endl;
}
浙公网安备 33010602011771号