AVL操作,模板题。
#include <bits/stdc++.h>
using namespace std;
struct Node{
int val,left=-1,right=-1,height=1;
}node[25];
bool init=false;
int curridx=0;
int getHeight(int root){
if(root==-1)return 0;
return node[root].height;
}
int getBalanceFactor(int root){
return getHeight(node[root].left)-getHeight(node[root].right);
}
void updateHeight(int root){
node[root].height=max(getHeight(node[root].left),getHeight(node[root].right))+1;
}
void L(int &root){
int temp=node[root].right;
node[root].right=node[temp].left;
node[temp].left=root;
updateHeight(root);
updateHeight(temp);
root=temp;
}
void R(int &root){
int temp=node[root].left;
node[root].left=node[temp].right;
node[temp].right=root;
updateHeight(root);
updateHeight(temp);
root=temp;
}
void insertNode(int &root, int v){
if(root==-1){
node[curridx].val=v;
root=curridx;
curridx++;
return;
}
if(v<node[root].val){
insertNode(node[root].left,v);
updateHeight(root);
if(getBalanceFactor(root)==2){
if(getBalanceFactor(node[root].left)==1){
R(root);
}else if(getBalanceFactor(node[root].left)==-1){
L(node[root].left);
R(root);
}
}
}else{
insertNode(node[root].right,v);
updateHeight(root);
if(getBalanceFactor(root)==-2){
if(getBalanceFactor(node[root].right)==-1){
L(root);
}else if(getBalanceFactor(node[root].right)==1){
R(node[root].right);
L(root);
}
}
}
}
int main(){
int n,m,num;
scanf("%d",&n);
int root=-1;
for(int i=0;i<n;i++){
int a;
scanf("%d",&a);
insertNode(root,a);
}
queue<int> q;
q.push(root);
bool lastpush=true,res=true;
int lastlevel=node[root].height;
while(!q.empty()){
int top=q.front();
printf("%d",node[top].val);
q.pop();
if(node[top].left!=-1){
q.push(node[top].left);
if(!lastpush)res=false;
lastpush=true;
}else lastpush=false;
if(node[top].right!=-1){
q.push(node[top].right);
if(!lastpush)res=false;
lastpush=true;
}else lastpush=false;
if(!q.empty())printf(" ");
else printf("\n");
}
if(res)printf("YES\n");
else printf("NO\n");
}