代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdlib.h>
#define Max(a,b) ((a)>(b)? (a):(b))
using namespace std; struct Node
{
int value;
Node* l;
Node* r;
int BF; //左子树高度 - 右子树高度
void init(int v)
{
value=v;
l=NULL;
r=NULL;
BF=0;
}
}; int Abs(int a)
{
return a>=0?a:-a;
} int getBF(Node* p)
{
if(p == NULL)
return -1;
return p->BF; } bool isBalanced(Node* p)
{
return Abs(getBF(p->l) - getBF(p->r)) < 2;
} Node* LL(Node* p)
{
Node* child = p->l;
p->l = child->r;
child->r = p; p->BF = Max(getBF(p->l),getBF(p->r)) + 1;
child->BF = Max(getBF(child->l),getBF(child->r)) + 1;
return child;
} Node* RR(Node* p)
{
Node* child = p->r;
p->r= child->l;
child->l = p; p->BF = Max(getBF(p->l),getBF(p->r)) + 1;
child->BF = Max(getBF(child->l),getBF(child->r)) + 1;
return child;
} Node* LR(Node* p)
{
Node* child = p->l;
p->l = RR(child);
return LL(p);
} Node* RL(Node* p)
{
Node* child = p->r;
p->r =LL(child);
return RR(p);
} Node* Insert(Node* p,int x)
{
if(p!=NULL)
{
if(x>p->value) //R
{
p->r= Insert(p->r,x);
if(!isBalanced(p))
{
if(x> p->r->value) //R-R
p = RR(p);
else //R-L
p=RL(p);
}
}
else //L
{
p->l= Insert(p->l,x);
if(!isBalanced(p))
{
if(x > p->l->value) //L-R
p = LR(p);
else //L-L
p = LL(p);
}
}
}
else
{
p=(Node*)malloc(sizeof(Node));
(*p).init(x);
}
p->BF = Max(getBF(p->l),getBF(p->r)) + 1;
return p;
} /*void PrintTree(Node* root)//先序遍历AVL树
{
if(root != NULL)
{
cout<<root->value<<"--";
PrintTree(root->l);
PrintTree(root->r);
}
}*/ int main()
{
int n;
while(scanf("%d",&n)==1)
{
Node* root=NULL;
int x;
for(int i=0; i<n; i++)
{
scanf("%d",&x);
root=Insert(root,x);
}
printf("%d\n",root->value);
//PrintTree(root);
}
return 0;
}

最新文章

  1. GOLDENGATE 配置文档,各类参数--转发
  2. Codeforces 570C 贪心
  3. CSS实现点击事件及实践
  4. C++的黑科技
  5. apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
  6. 从1970年1月1日00:00:00 GMT以来此时间对象表示的毫秒数转化为Datetime
  7. [复变函数]第17堂课 5 解析函数的 Laurent 展式与孤立奇点 5. 1 解析函数的 Laurent 展式
  8. VS C# 快捷键
  9. 【转】PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
  10. PHP7新特性
  11. 我的项目经验总结——CDN镜像:1(初探)
  12. lesson - 11 正则表达式
  13. leetcode 104 Maximum Depth of Binary Tree二叉树求深度
  14. 【JVM】-NO.113.JVM.1 -【JDK11 HashMap详解-4-resize()】
  15. python &quot;import this&quot;
  16. js中使用showModelDialog中下载文件的时候,闪一下后无法下载
  17. php框架中,try,catch不能用的问题(转载)
  18. 数据库——MongoDB增删改查
  19. ZOJ1100 Mondriaan&#39;s Dream
  20. 51Nod 1090: 3个数和为0

热门文章

  1. 程序猿爱情表白专用html5动画网页的代码
  2. POJ 1236--Network of Schools【scc缩点构图 &amp;amp;&amp;amp; 求scc入度为0的个数 &amp;amp;&amp;amp; 求最少加几条边使图变成强联通】
  3. Jmeter执行多条Mysql语句报错
  4. c++面向对象程序设计 谭浩强 第一章答案
  5. 一名3年工作经验的java程序员应该具备的技能
  6. SQLserver中用convert函数转换日期格式(2)
  7. HD-ACM算法专攻系列(19)——Leftmost Digit
  8. C++逐行读取文本文件的正确做法
  9. 实现点击EditText登录时,界面上移避免键盘遮挡界面
  10. 手游服务器端接入facebook的SDK