#include <iostream>
#include <math.h>
using namespace std;
struct node
{
int data;
node* lchild,* rchild;
};
int getHeight(node* root){
if(!root) return 0;
int l=getHeight(root->lchild);
int r=getHeight(root->rchild);
return max(l,r)+1;
}
node* RR(node* root){
node* B=root->lchild;
root->lchild=B->rchild;
B->rchild=root;
return B;
}
node* LL(node* root){
node* B=root->rchild;
root->rchild=B->lchild;
B->lchild=root;
return B;
}
node* RL(node* root){
root->lchild=LL(root->lchild);
return RR(root);
}
node* LR(node* root){
root->rchild=RR(root->rchild);
return LL(root);
}
node* InsertT(node* root,int val){
if(!root){
root=new node;
root->data=val;
root->lchild=root->rchild=NULL;
return root;
}
if(root->data>val){
root->lchild=InsertT(root->lchild,val);
if(getHeight(root->lchild)-getHeight(root->rchild)>=2){
if(root->lchild->data>val){//左子树的左子树
root=RR(root);
}else{//左子树的右子树
root=RL(root);
}
}
}else{
root->rchild=InsertT(root->rchild,val);
if(getHeight(root->rchild)-getHeight(root->lchild)>=2){
if(root->rchild->data<val){//右子树的右子树
root=LL(root);
}else{
root=LR(root);
}
}
}
return root;
}
int main(){
int n,t;
scanf("%d",&n);
node* root=NULL;
for(int i=0;i<n;i++){
scanf("%d",&t);
root=InsertT(root,t);
}
printf("%d",root->data);
return 0;
}
【PAT】1066 Root of AVL Tree (25 分)
最新推荐文章于 2022-06-11 23:27:19 发布