#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
node*lch,*rch;
int key;
node(int x):key(x){lch=rch=nullptr;}
};
using ptr=node*;
int deep(ptr p)
{
if(!p)return 0;
return max(deep(p->lch),deep(p->rch))+1;
}
ptr ll(ptr p)
{//右旋
ptr l=p->lch;
p->lch=l->rch,l->rch=p;
return l;
}
ptr rr(ptr p)
{//左旋
ptr r=p->rch;
p->rch=r->lch,r->lch=p;
return r;
}
ptr rl(ptr p)
{
p->rch=ll(p->rch);
return rr(p);
}
ptr lr(ptr p)
{
p->lch=rr(p->lch);
return ll(p);
}
ptr insert(ptr p,int x)
{
if(!p)return new node(x);
if(x<p->key)
{
p->lch=insert(p->lch,x);
if(deep(p->lch)-deep(p->rch)==2)
return x<p->lch->key?ll(p):lr(p);
}else
{
p->rch=insert(p->rch,x);
if(deep(p->rch)-deep(p->lch)==2)
return x<p->rch->key?rl(p):rr(p);
}
return p;
}
int main()
{
int n;cin>>n;
ptr p=nullptr;
for(int t,i=0;i<n;++i)
{
cin>>t;
p=insert(p,t);
}
cout<<p->key;
}
1066. Root of AVL Tree
最新推荐文章于 2022-09-25 16:05:11 发布