pat(A) 1066. Root of AVL Tree
2024-09-07 22:47:18
代码:
#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;
}
最新文章
- GOLDENGATE 配置文档,各类参数--转发
- Codeforces 570C 贪心
- CSS实现点击事件及实践
- C++的黑科技
- apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
- 从1970年1月1日00:00:00 GMT以来此时间对象表示的毫秒数转化为Datetime
- [复变函数]第17堂课 5 解析函数的 Laurent 展式与孤立奇点 5. 1 解析函数的 Laurent 展式
- VS C# 快捷键
- 【转】PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
- PHP7新特性
- 我的项目经验总结——CDN镜像:1(初探)
- lesson - 11 正则表达式
- leetcode 104 Maximum Depth of Binary Tree二叉树求深度
- 【JVM】-NO.113.JVM.1 -【JDK11 HashMap详解-4-resize()】
- python ";import this";
- js中使用showModelDialog中下载文件的时候,闪一下后无法下载
- php框架中,try,catch不能用的问题(转载)
- 数据库——MongoDB增删改查
- ZOJ1100 Mondriaan&#39;s Dream
- 51Nod 1090: 3个数和为0
热门文章
- 程序猿爱情表白专用html5动画网页的代码
- POJ 1236--Network of Schools【scc缩点构图 &;amp;&;amp; 求scc入度为0的个数 &;amp;&;amp; 求最少加几条边使图变成强联通】
- Jmeter执行多条Mysql语句报错
- c++面向对象程序设计 谭浩强 第一章答案
- 一名3年工作经验的java程序员应该具备的技能
- SQLserver中用convert函数转换日期格式(2)
- HD-ACM算法专攻系列(19)——Leftmost Digit
- C++逐行读取文本文件的正确做法
- 实现点击EditText登录时,界面上移避免键盘遮挡界面
- 手游服务器端接入facebook的SDK