#include<bits/stdc++.h>
using namespace std;
struct Node
{
int data;
Node* left;
Node* right;
};
int n;
int height(Node* T)
{
return T==NULL?0:max(height(T->left),height(T->right))+1;
}
Node* turn1(Node* T)
{
Node* A=T->left;
T->left=A->right;
A->right=T;
return A;
}
Node* turn2(Node* T)
{
Node* A=T->right;
T->right=A->left;
A->left=T;
return A;
}
Node* turn3(Node* T)
{
T->left=turn2(T->left);
return turn1(T);
}
Node* turn4(Node* T)
{
T->right=turn1(T->right);
return turn2(T);
}
Node* Insert(Node* T,int x)
{
if(T==NULL)
{
T=new Node({x,NULL,NULL});
}
else if(x<T->data)
{
T->left=Insert(T->left,x);
if(height(T->left)-height(T->right)==2)
T=(x<T->left->data?turn1(T):turn3(T));
}
else if(x>T->data)
{
T->right=Insert(T->right,x);
if(height(T->left)-height(T->right)==-2)
T=(x>T->right->data?turn2(T):turn4(T));
}
return T;
}
int main()
{
Node* Tree=NULL;
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
Tree=Insert(Tree,x);
}
cout<<Tree->data<<endl;
return 0;
}
题目: