数据结构实验之查找二:平衡二叉树

Time Limit: 400MS Memory Limit: 65536KB

Problem Description

根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。

Input

输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。

Output

输出平衡二叉树的树根。

Example Input

5
88 70 61 96 120

Example Output

70

DQE:

结点平衡因子改为该结点树深度,旋转操作记得更新结点深度。
 
 #include <iostream>
#include <cstdio>
using namespace std;
/*
全测数据
in
9
16 3 7 11 9 26 18 14 15
out
11 7 3 9 18 15 14 16 26
3 7 9 11 14 15 16 18 26
*/
struct BT
{
int d;
int x;
BT *lt,*rt;
}; int dp(BT *r)
{
return r?r->d:;
}
void rfd(BT *r)
{
int ld=dp(r->lt)+,rd=dp(r->rt)+;
r->d=ld>rd?ld:rd;
} void LL(BT *&r)
{
// printf("LL#%d#%d*%d ",r->x,dp(r->lt),dp(r->rt));
BT *a=r,*b=a->lt,*br=b->rt;
r=b; //利用引用修改上级指向
b->rt=a;
a->lt=br;
//深度重定
rfd(a);
}
void RR(BT *&r)
{
// printf("RR#%d#%d*%d ",r->x,dp(r->rt),dp(r->lt));
BT *a=r,*b=a->rt,*bl=b->lt;
r=b;
b->lt=a;
a->rt=bl; rfd(a);
}
void LR(BT *&r)
{
RR(r->lt);
rfd(r->lt);
LL(r);
}
void RL(BT *&r)
{
LL(r->rt);
rfd(r->rt);
RR(r);
} void insert(BT *&root,int e)
{
if(!root)
{
BT *r=new BT;
r->x=e;
r->d=;
r->lt=r->rt=NULL;
root=r;
}
else
{
if(e<root->x)
{
insert(root->lt,e);
if(dp(root->lt)-dp(root->rt)>)
{
if(e<root->lt->x)
LL(root);
else
LR(root);
}
}
else if(e>root->x)
{
insert(root->rt,e);
if(dp(root->rt)-dp(root->lt)>)
{
if(e>root->rt->x)
RR(root);
else
RL(root);
}
}
//更新根深度
rfd(root);
}
} void xout(BT *r)
{if(r){printf("%d ",r->x);xout(r->lt);xout(r->rt);}}
void mout(BT *r)
{if(r){mout(r->lt);printf("%d ",r->x);mout(r->rt);}}
int main()
{
BT *root=NULL;
int n,i;
scanf("%d",&n);
while(n--)
{
scanf("%d",&i);
insert(root,i);
}
/*
putchar('\n');
xout(root);
putchar('\n');
mout(root);
*/
printf("%d\n",root->x);
return ;
} /***************************************************
User name: ***
Result: Accepted
Take time: 0ms
Take Memory: 156KB
Submit time: 2016-11-29 19:09:25
****************************************************/

SDUT 3374 数据结构实验之查找二:平衡二叉树的更多相关文章

  1. SDUTOJ 3374 数据结构实验之查找二:平衡二叉树

    题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/3374.html 题目大意 略. 分析 ...

  2. SDUT 3376 数据结构实验之查找四:二分查找

    数据结构实验之查找四:二分查找 Time Limit: 20MS Memory Limit: 65536KB Submit Statistic Problem Description 在一个给定的无重 ...

  3. SDUT OJ 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二:遍历二叉树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  4. SDUT OJ 数据结构实验之串二:字符串匹配

    数据结构实验之串二:字符串匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  5. SDUT OJ 数据结构实验之排序二:交换排序

    数据结构实验之排序二:交换排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  6. SDUT OJ 数据结构实验之链表二:逆序建立链表

    数据结构实验之链表二:逆序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  7. SDUT 3399 数据结构实验之排序二:交换排序

    数据结构实验之排序二:交换排序 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 冒泡排序和快 ...

  8. SDUT 3379 数据结构实验之查找七:线性之哈希表

    数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定 ...

  9. SDUT 3377 数据结构实验之查找五:平方之哈希表

    数据结构实验之查找五:平方之哈希表 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 给定的一组 ...

随机推荐

  1. H5实现登录

    1.主要就是获取cookie并每次发送请求时都带着:登录请求 2.添加HTTP Cookie管理器 3.登录请求时,加正则表达式提取器 取出返回的cookie ①使用charles抓包查看cookie ...

  2. C++中预定义的宏

    以下信息摘自与标准C++的文档中. 如果把这些宏加在程序的日志中,它将为开发人员进行问题分析提供了很好的帮助. standard c++ 1998版The following macro names ...

  3. linux下ioctl遇到的坑

    在驱动编程里面经常会用到ioctl的系统调用,发现cmd = 2的时候,用户ioctl直接返回-1. 原因在于在linux-x.xx/fs/ioctl.c定义的do_vfs_ioctl函数 int d ...

  4. Maven错误之 Check $M2_HOME environment variable

    Eclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is ...

  5. [转]你知道用AngularJs怎么定义指令吗?--很详细

    前言 最近学习了下angularjs指令的相关知识,也参考了前人的一些文章,在此总结下. 欢迎批评指出错误的地方.   Angularjs指令定义的API AngularJs的指令定义大致如下 ang ...

  6. COGS 2259 异化多肽 —— 生成函数+多项式求逆

    题目:http://cogs.pro:8080/cogs/problem/problem.php?pid=2259 如果构造生成函数是许多个 \( (1+x^{k}+x^{2k}+...) \) 相乘 ...

  7. 给JavaScript文件传入参数的几种方法

    一.利用全局变量 这是最简单的一种方式,比如Google Adsense: <script type="text/javascript"> google_ad_clie ...

  8. Order By操作

    本文转载自:http://www.cnblogs.com/vingi/articles/2450482.html 适用场景:对查询出的语句进行排序,比如按时间排序等等. 说明:按指定表达式对集合排序: ...

  9. spring之:XmlWebApplicationContext作为Spring Web应用的IoC容器,实例化和加载Bean的过程

    它既是 DispatcherServlet 的 (WebApplicationContext)默认策略,又是 ContextLoaderListener 创建 root WebApplicationC ...

  10. JVM插码之四:Java动态代理机制的对比(JDK 和CGLIB,Javassist,ASM)

    一.class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件, ...