- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计AVL树实现及其分析实验报告
算 法 与 数 据 结 构
课 程 设 计 报 告
题 目: AVLree的实现及分析
班 级: 12计算机1
学 号: 1200303132
姓 名: 熊成毅
成 绩:
2013年 12月31日
一、AVLree的实现及分析
AVL 树是平衡的二元查找树。一株平衡的二元查找树就是指对其每一个节点,其左子树和右子树的高度只差不超过1.
编写程序实现AVL树的判别;并实现AVL树的ADT,包括其上的基本操作;节点的加入和删除。BSt和AVL的差别就在平衡性上,所以AVL的操作关键要考虑如何在保持二元查找树定义条件下对二元树进行平衡化。
编写AVL树的判别程序,并判别一个人元查找数是否为AVL树。二元查找树用其先序遍历结果表示,如:5,2,1,3,7,8.
实现AVL树的ADT,包括其上的基本操作:节点的加入和删除,另外包括将一般二元查找树转变为AVL树的操作。
二、设计思想(宋体,三号加粗)
任意给定一组数据,设计一个算法,建立一棵平衡二叉树,对它进行查找、插入、删除等操作。平衡二叉树ADT结构如下:
typedef struct{
Status key;
}ElemType;
typedef struct BSTNode{
ElemType data;
Status bf;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
给出一组数据,通过
InsertAVL(BSTree T, ElemType e, Status taller)插入算法,构建平衡二叉树,若在平衡的二叉排序树T中不存在和e有相同关键字的结点,则插入一个数据元素为e的新结点,并返回1,否则返回0。若因插入而使二叉排序树失去平衡,则作平衡旋转处理,布尔变量taller反映T长高与否。
在此算法中,利用到递归算法和
LeftBalance(BSTree T)左平衡处理,RightBalance(BSTree T)右平衡处理。进而实现构建平衡二叉树,使其左子树和右子树的高度之差不超过1.
LeftBalance(BSTree T)对以指针T所指结点为根的二叉树作左平衡旋转处理。本算法结束时,指针T指向新的根结点。
RightBalance(BSTree T)// 对以指针T所指结点为根的二叉树作右平衡旋转处理。本算法结束时,指针T指向新的根结点。
R_Rotate(BSTree p) 对以*p为根的二叉排序树作右旋处理,处理之后p指向新的树根结点,即旋转处理之前的左子树的根结点
L_Rotate(BSTree p) 对以p↑为根的二叉排序树作左旋处理,处理之后p指向新的树根结点,即旋转处理之前的右子树的根结点
存在一个平衡二叉树,通过DeleteBST(BSTree T, Status key)和Delete(BSTree p)实现删除节点操作;
Delete(BSTree p)从二叉排序树中删除结点p,并重接它的左或右子树。
DeleteBST(BSTree T, Status key)若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点p,并返回TRUE;否则返回FALSE。
存在一个平衡二叉树,通过SearchBST(BSTree T, Status key, BSTree f, BSTree p)实现查找节点操作;
SearchBST(BSTree T, Status key, BSTree f, BSTree p)在根指针T所指二叉排序树中递归地查找其关键字等于key的数据元素,若查找成功,则指针p指向该数据元素结点,并返回TRUE,否则指针p指向查找路径上访问的最后一个结点并返回FALSE,指针f指向T的双亲,其初始调用值为NULL。
存在一个二元排序树或二元查找树通过Balance(BSTree T)算法判断是否为AVL树,
Balance(BSTree T)递归判断是不是平衡二叉树。
三、软件结构图及流程图(宋体,三号加粗)
主函数流程图:
1 2
3 4
0
构建AVL树和插入结点流程图:
否
是
是 否
查找函数流程图:
删除函数流程图:
四、测试(宋体,三号加粗)
创建AVL树,输入一组数据:
按先序遍历输出:
删除节点7;先序遍历结果:
插入数据6后的先序遍历结果:然后退出子目录操作。
输入一组数据创建BST树,
判断创建的BST是否为AVL树:
创建的BST树不是AVL树,将BST转换为AVL树
五、源程序(宋体,三号加粗)
函数头代码
#include iostream.h
#include stdio.h
#in
文档评论(0)