#include<stdio.h>
#include<algorithm>
using namespace std;
struct pnode{
int data, height;
pnode *left;
pnode *right;
};
int gethight(pnode* root){
if(root==NULL) return 0;
return root->height;
}
void updatehight(pnode* root){
root->height=max(gethight(root->left),gethight(root->right))+1;
}
int getbalance(pnode* root){
return gethight(root->left)-gethight(root->right);
}
void L(pnode* &root){
pnode* temp=root->right;
root->right=temp->left;
temp->left=root;
updatehight(root);
updatehight(temp);
root=temp;
}
void R(pnode* &root){
pnode* temp=root->left;
root->left=temp->right;
temp->right=root;
updatehight(root);
updatehight(temp);
root=temp;
}
void insert(pnode * &root, int x){
if(root==NULL){
root=new pnode;
root->data=x;
root->height=1;
root->left=root->right=NULL;
return ;
}
if(x<root->data){
insert(root->left,x);
updatehight(root);
if(getbalance(root)==2){
if(getbalance(root->left)==1){//LL
R(root);
}
else{//LR
L(root->left); R(root);
}
}
}
else{
insert(root->right,x);
updatehight(root);
if(getbalance(root)==-2){
if(getbalance(root->right)==-1){//LL
L(root);
}
else{//LR
R(root->right); L(root);
}
}
}
}
int main(){
int i, temp, n;
pnode* root=NULL;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&temp);
insert(root, temp);
}
printf("%d",root->data);
return 0;
}
PAT-A1066
最新推荐文章于 2022-06-11 23:27:19 发布