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

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. uva489(需要考虑周全)

    这个题是简单题,但是我的思路本身不周全,忽略了一种比较“无理”的情况,而导致WA多次.我是把猜的串全扫一遍以后判断出结果,但是实际上可能是前面已经全猜对了,但是这个选手是个逗比,已经猜对了还要猜,而且 ...

  2. VSCode使用正则表达式进行内容替换

    首先描述一下我要达到的目的: 1.源数据: 2.目标数据: 3.使用的正则表达式如下: (id: (\d+),) id: $2, \n order: $2,

  3. localtime 和 localtime_r 的区别

    转自:http://blog.csdn.net/maocl1983/article/details/6221810 #include <cstdlib> #include <iost ...

  4. LeetCode Output Contest Matches

    原题链接在这里:https://leetcode.com/problems/output-contest-matches/description/ 题目: During the NBA playoff ...

  5. an easy problem(贪心)

    An Easy Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8333   Accepted: 4986 D ...

  6. java 实现拖动文件到窗口功能

    package tuo; import java.awt.BorderLayout; import java.awt.Color; import java.awt.datatransfer.DataF ...

  7. Linux 终端 忽略大小写

    忘了在哪里看到的了,记录一下. 在-/.inputrc中加入一行 set completion-ignore-case on 搞定! 这样在终端输入.补全时就忽略大小写了.当然,Linux本身还是区分 ...

  8. SpringCloud基础教程学习记录

    这个学习记录是学习自翟永超前辈的SpringCloud的基础教程. 自己写这个教程的目的主要是在于,想要更凝练总结一些其中的一些实用点,顺便做个汇总,这样自己在复习查看的时候更加方便,也能顺着自己的思 ...

  9. GIT学习地址

    https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 git下载:https://gi ...

  10. Swing编程中为什么对Panel设置了位置后,它的lable位置也跟这变了呢?

    总结: package com.da; //这里我不明白,我对每一个Panle里的按钮设置了位置BorderLayout.SOUTH.可是为什么Lable的位置和它一样同步设置了呢? //做一个界面 ...