数据结构实验之查找二:平衡二叉树
来源:互联网 发布:淘宝申请售后时间期限 编辑:程序博客网 时间:2024/06/02 00:19
题目描述
根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。
输入
输入一组测试数据。数据的第1行给出一个正整数N(n <= 20),N表示输入序列的元素个数;第2行给出N个正整数,按数据给定顺序建立平衡二叉树。
输出
输出平衡二叉树的树根。
示例输入
588 70 61 96 120
示例输出
70
/*#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct BNode
{
int data;
int d;//记录树的深度;
BNode *lchild,*rchild;
}*BiTree;
int deep(BiTree &T)
{
if(!T)
return 0;
return T->d;
}
BiTree LL(BiTree &T)//向右旋型
{
BiTree p;
p=T->lchild;
T->lchild=p->rchild;
p->rchild=T;
p->d=max(deep(p->lchild),deep(p->rchild))+1;
T->d=max(deep(T->lchild),deep(T->rchild))+1;
return p;
}
BiTree RR(BiTree &T)//向左型旋;
{
BiTree p;
p=T->rchild;
T->rchild=p->lchild;
p->lchild=T;
p->d=max(deep(p->lchild),deep(p->rchild))+1;
T->d=max(deep(T->lchild),deep(T->rchild))+1;
return p;
}
BiTree LR(BiTree &T)//旋转分两步:1.以a为根结点的RR旋转 2.以x为根结点的LL旋转
{
T->lchild=RR(T->lchild);
return LL(T);
}
BiTree RL(BiTree &T)//旋转分两步:1.以a为根结点的LL旋转 2.以x为根结点的RR旋转
{
T->rchild=LL(T->rchild);
return RR(T);
}
BiTree Insert(BiTree &T,int n)
{
if(!T)
{
T=new BNode;
T->lchild=T->rchild=NULL;
T->data=n;
T->d=1;
}
else if(n<T->data)
{
T->lchild=Insert(T->lchild,n);
if(deep(T->lchild)-deep(T->rchild)>1)
{
if(n<T->lchild->data)
T=LL(T);
else
T=LR(T);
}
}
else if(n>T->data)
{
T->rchild=Insert(T->rchild,n);
if(deep(T->rchild)-deep(T->lchild)>1)
{
if(n>T->rchild->data)
T=RR(T);
else
T=RL(T);
}
}
T->d=max(deep(T->lchild),deep(T->rchild))+1;
return T;
}
int main()
{
int n,num;
scanf("%d",&n);
BiTree T;
T=NULL;//树的初始化。
for(int i=0;i<n;i++)
{
scanf("%d",&num);
Insert(T,num);
}
printf("%d\n",T->data);
return 0;
}*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>//max函数在此头文件中;
using namespace std;
typedef struct BNode
{
int data;
int d;
BNode *lchild,*rchild;
}*BiTree;
int n;
int deep(BiTree T)
{
if(!T)
return -1;
return T->d;
}
BiTree LL(BiTree &T)
{
BiTree p;
p=T->lchild;
T->lchild=p->rchild;
p->rchild=T;
p->d=max(deep(p->lchild),deep(p->rchild))+1;
T->d=max(deep(T->lchild),deep(T->rchild))+1;
return p;
}
BiTree RR(BiTree &T)
{
BiTree p;
p=T->rchild;
T->rchild=p->lchild;
p->lchild=T;
p->d=max(deep(p->rchild),deep(p->lchild))+1;
T->d=max(deep(T->rchild),deep(T->lchild))+1;
return p;
}
BiTree LR(BiTree &T)
{
T->lchild=RR(T->lchild);
return LL(T);
}
BiTree RL(BiTree &T)
{
T->rchild=LL(T->rchild);
return RR(T);
}
BiTree Insert(BiTree &T,int x)
{
if(!T)
{
T=new BNode;
T->lchild=T->rchild=NULL;
T->data=x;
T->d=0;
}
else if(x<T->data)
{
Insert(T->lchild,x);
if(deep(T->lchild)-deep(T->rchild)>1)
{
if(x<T->lchild->data)
T=LL(T);
else
T=LR(T);
}
}
else if(x>=T->data)
{
Insert(T->rchild,x);
if(deep(T->rchild)-deep(T->lchild)>1)
{
if(x>T->rchild->data)
T=RR(T);
else
T=RL(T);
}
}
T->d=max(deep(T->rchild),deep(T->lchild))+1;
return T;
}
int main()
{
scanf("%d",&n);
int num;
BiTree T;
T=NULL;
for(int i=1;i<=n;i++)
{
scanf("%d",&num);
T=Insert(T,num);
}
printf("%d\n",T->data);
}
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树【OJ--3374】
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUT 3374 数据结构实验之查找二:平衡二叉树
- SDUT3374数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- 数据结构实验之查找二:平衡二叉树
- SDUTACM 数据结构实验之查找二:平衡二叉树
- elm之入门相关
- nginx使用image_filter生成缩略图 -- fasdfs海量图片缩略图整合
- 【技术术语】Sun HotSpot VM
- iOS开发笔记
- 基础总结篇之一:Activity生命周期
- 数据结构实验之查找二:平衡二叉树
- Lambda的语法和方法引用
- 利用javassist修改.class文件,并重新打包
- MyBatis使用Collection查询多对多或一对多结果集bug
- EventBus3.0源码解析
- linux send与recv函数详解
- Average loss decreases with batches increasing
- Android学习心得(20) --- Hook技术( 1 )
- 使用 PhpStorm开发Laravel项目