`
hufeng
  • 浏览: 100988 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

构造包含这个n个整数的AVL树

阅读更多
#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树数据结构平衡二叉查找树

    增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们在1962年的论文《An algorithm for the organization of information》中发表了它。

    AVL树的判定问题.rar

    包含课题的C语言实现源码以及实验报告。题目描述:给定一个二叉树(存储结构采用二叉链表表示),试设计算法判断该二叉树 ...根据这个概念,判断 AVL 树 就是去判断一棵二叉树是否是二叉搜索树,并且是否满足平衡条件。

    红黑树和AVL树的实现

    红黑树和AVL树的代码实现,并显示树的形状,同时红黑树还可以输出个路径以及黑高度

    AVL树的实现基于C++语言

    这两个源文件主要实现了基于C++语言编写的AVL树,将AVL树的所有操作都实现了。测试平台为Linux,现将AVL树的源码奉上。

    AVL树的介绍

    AVL树的简介,方便初学的读者了解AVL树。

    c++实现的avl树

    包括插入,删除等操作的AVL树,C++实现

    AVL树操作图形界面

    数据结构课程设计 图像化界面演示AVL树的插入、删除、查找操作,支持旋转的单步和自动演示

    avl树 插入删除以及判断是否为AVL树

    AVL树中 插入、删除节点以及判断一棵二叉查找树是否为AVL树

    avl树的实现

    数据结构中avl树的实现,包含avl树的插入,删除节点,并以括号表示法输出结果

    实现AVL树的头文件

    这个头文件里实现了AVL树的建立、左单旋转、右单旋转、双旋转的功能,还有输出AVL的功能。

    avl树的c++实现,包括在控制台中绘制树

    avl树的c++实现,包括在控制台中绘制树

    AVL树详细解释,AVL树详细解释

    AVL树详解, 可以更深刻的了解到AVL树 AVL树详解, 可以更深刻的了解到AVL树 AVL树详解, 可以更深刻的了解到AVL树 AVL树详解, 可以更深刻的了解到AVL树 AVL树详解, 可以更深刻的了解到AVL树

    AVL树的C语言实现

    AVL树的C语言实现

    AVL树的删除操作

    AVL树的删除程序,包括完整的源代码和可执行程序

    avl_tree.rar_ avl_tree_AVL树_avl

    avl树是每个节点的左子树和右子树的高度最多差1的二叉查找树.一棵高度为h的avl树最少节点数由S(h) = S(h-1)+S(h-2)+1得到.avl树要保证任一节点的左右子树的高度之差的绝对值不能超过1(空树的高定义为1).在插入和删除...

    数据结构与算法课程设计---AVL TREE的实现及分析

    (1)编写 AVL树判别程序,并判别一个二元查找树是否为 AVL树。二元查找树用其先序遍历结果表示,如:5,2,1,3,7,8。 (2)实现 AVL树的 ADT,包括其上的基本操作:结点的加入和删除;另外包括将一般二元查找树...

    AVL树与红黑树实现(可视化界面)

    本人实现的 AVL树与红黑树,具有可视化界面,代码清晰。

    AVL树C++实现

    学习AVL树的算法实现,使用c++在vc6.0中进行相应的算法实现,对正在学习算法的孩子有帮助

    C++版AVL树课程设计源代码

    编写AVL树判别程序,并判别一个二叉搜索树是否为AVL树;2.实现AVL树的ADT,包括其上的基本操作:结点的加入和删除;3.实现基本操作的动态演示(图形演示);最重要的是,该程序可以画出你所输入的树

    B-树和AVL树源码

    自已实现的B-树和AVL树的源码

Global site tag (gtag.js) - Google Analytics