#include "stdlib.h"
#include "stdio.h"
typedef int DataType;
#define MAX 100
/*读入n(n<=100)个两两不等的整数(以-9999介绍),构造包含这个n个整数的AVL树,输出该树的前序,中序和高度*/
/*AVL 平衡二叉排序树*/
typedef struct tree
{
DataType d;
struct tree *lchild,*rchild;
}Tree,*PTree;
/*接受控制台一串数的输入,从小到大排序*/
void inputData(int a[],int *al )
{
int i,j,temp;
int flag = 0;
*al=0;
do
{
scanf("%d",&i);
if(i==-9999)break;
a[(*al)++]=i;
}while(9);
//冒泡排序
for(i=0;i<*al;i++)
{
flag=0;
for(j=0;j<*al-i;j++)
if(a[j]<a[j+1])
{
flag=1;
temp=a[j];a[j]=a[j+1];a[j+1]=temp;
}
if(flag==0)break;
}
}
//r表示根节点
void insertSortTree(PTree *r,int x)
{
PTree p,q;
q=(PTree)malloc(sizeof(Tree));
q->d=x;
q->lchild=NULL;q->rchild=NULL;
if(*r==NULL)
{
*r=q;return;
}
p=*r;
/*
while(p)
{
if(p->d>x)
p=p->lchild;
else
p=p->rchild;
}
p=q; 该注释地方同下面有什么不一样的吗?*/
while(1)
{
if(x<p->d)
if(p->lchild)
p=p->lchild;
else
{
p->lchild=q;
return;
}
else
if(p->rchild)
p=p->rchild;
else
{
p->rchild=q;return;
}
}
}
//通过此调用,让数据两端达到平衡
void createAVL(int a[],int s,int e,PTree *p)
{
int mid;
if(s>e)return;
mid=(s+e)/2;
printf("%d ",a[mid]);//依次将节点插入到平衡二叉树
insertSortTree(p,a[mid]);
createAVL(a,s,mid-1,p);
createAVL(a,mid+1,e,p);
}
void inOrder(PTree r)
{
if(r)
{
inOrder(r->lchild);
printf("%d ",r->d);
inOrder(r->rchild);
}
}
void main()
{
int a[MAX],al;
PTree p=NULL;
inputData(a,&al);
createAVL(a,0,al-1,&p);
printf("前序:");
inOrder(p);
}
分享到:
相关推荐
增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们在1962年的论文《An algorithm for the organization of information》中发表了它。
包含课题的C语言实现源码以及实验报告。题目描述:给定一个二叉树(存储结构采用二叉链表表示),试设计算法判断该二叉树 ...根据这个概念,判断 AVL 树 就是去判断一棵二叉树是否是二叉搜索树,并且是否满足平衡条件。
红黑树和AVL树的代码实现,并显示树的形状,同时红黑树还可以输出个路径以及黑高度
这两个源文件主要实现了基于C++语言编写的AVL树,将AVL树的所有操作都实现了。测试平台为Linux,现将AVL树的源码奉上。
AVL树的简介,方便初学的读者了解AVL树。
包括插入,删除等操作的AVL树,C++实现
数据结构课程设计 图像化界面演示AVL树的插入、删除、查找操作,支持旋转的单步和自动演示
AVL树中 插入、删除节点以及判断一棵二叉查找树是否为AVL树
数据结构中avl树的实现,包含avl树的插入,删除节点,并以括号表示法输出结果
这个头文件里实现了AVL树的建立、左单旋转、右单旋转、双旋转的功能,还有输出AVL的功能。
avl树的c++实现,包括在控制台中绘制树
AVL树详解, 可以更深刻的了解到AVL树 AVL树详解, 可以更深刻的了解到AVL树 AVL树详解, 可以更深刻的了解到AVL树 AVL树详解, 可以更深刻的了解到AVL树 AVL树详解, 可以更深刻的了解到AVL树
AVL树的C语言实现
AVL树的删除程序,包括完整的源代码和可执行程序
avl树是每个节点的左子树和右子树的高度最多差1的二叉查找树.一棵高度为h的avl树最少节点数由S(h) = S(h-1)+S(h-2)+1得到.avl树要保证任一节点的左右子树的高度之差的绝对值不能超过1(空树的高定义为1).在插入和删除...
(1)编写 AVL树判别程序,并判别一个二元查找树是否为 AVL树。二元查找树用其先序遍历结果表示,如:5,2,1,3,7,8。 (2)实现 AVL树的 ADT,包括其上的基本操作:结点的加入和删除;另外包括将一般二元查找树...
本人实现的 AVL树与红黑树,具有可视化界面,代码清晰。
学习AVL树的算法实现,使用c++在vc6.0中进行相应的算法实现,对正在学习算法的孩子有帮助
编写AVL树判别程序,并判别一个二叉搜索树是否为AVL树;2.实现AVL树的ADT,包括其上的基本操作:结点的加入和删除;3.实现基本操作的动态演示(图形演示);最重要的是,该程序可以画出你所输入的树
自已实现的B-树和AVL树的源码