就是AVL的模板题了 注意细节
#include<bits/stdc++.h> using namespace std; typedef struct node; typedef node * tree; struct node { int v; int heigh; tree L,R; }; int getheigh(tree root) { if(root==NULL) return 0; return root->heigh; } void updataheigh(tree root) { root->heigh=max(getheigh(root->L),getheigh(root->R))+1; } int getBalance(tree root) { return getheigh(root->L)-getheigh(root->R); } void L(tree &root) { tree temp; temp=root->R; root->R=temp->L; temp->L=root; updataheigh(root); updataheigh(temp); root=temp; } void R(tree &root) { tree temp; temp=root->L; root->L=temp->R; temp->R=root; updataheigh(root); updataheigh(temp); root=temp; } void insertt(tree &root,int v) { if(root==NULL){ root=new node; root->v=v; root->heigh=1; root->L=root->R=NULL; return; } if(v<root->v){ insertt(root->L,v); updataheigh(root); if(getBalance(root)==2){ if(getBalance(root->L)==1){ R(root); } else if(getBalance(root->L)==-1){ L(root->L); R(root); } } } else{ insertt(root->R,v); updataheigh(root); if(getBalance(root)==-2){ if(getBalance(root->R)==-1){ L(root); } else if(getBalance(root->R)==1){ R(root->R); L(root); } } } } int main() { int n; scanf("%d",&n); int x; tree root; root=NULL; for(int i=0;i<n;i++){ scanf("%d",&x); insertt(root,x); } printf("%d ",root->v); return 0; }