平衡二叉树操作.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
平衡二叉树操作

课 程 设 计 报 告 课程名称 ___数据结构课程设计____ 题 目 平衡二叉树操作 指导教师 刘城霞、蔡英 设计起止日期 2010-5-3至2010-5-11 系 别_______ 计算机学院_____ __ 专 业____ 计算机科学与技术__ __ 班级/学号_J计科0702班/2007010631_ 学生姓名 王自平 成 绩 _______________________ 实验六 平衡二叉树操作 需求分析 设计一个实现平衡二叉树的程序,可进行创建,增加,删除调平等操作,实现动态的输入数据,实时输出该树的结构 输入:动态输入数据 输出:实时输出树的结构 功能:建立平衡二叉树并进建,增加,删除,调平等操作 (4) 测试数据:5,3,8,1,2,7,9 概要设计 数据结构: 用二叉链表存储二叉排序树; 这里使用的主要算法有: 插入函数: Insert():判断新插入的结点的位置是否有孩子,如果有孩子则找到叶子节点,如果是则直接插入,如果不是怎需要判断新插入的结点与父结点的大小,若相等则返回插入结束,若小于则以父结点的左孩子为下次寻找时的父结点,若大于同理,依次循环,知道把新结点插入到叶子结点为止。 创建平衡二叉树:creat_BSTree():该函数调用了两个函数一个是插入函数,另一个是输出函数,使用了while循环,循环的终止条件是当添加的结点是-2,这样就能创建一个平衡二叉树了。 删除操作:Delete() :这里的删除类似于链表的删除,当删除的是叶子结点时,直接删除;当删除的是非叶子结点时,要把该删除的结点的左孩子活着右孩子顶替到被删结点的位置; 调平操作:L_R () 左旋情况:R_R()右旋情况 : LeftB()左旋情况处理 :RightB() 右旋情况处理:LeftB1() 左旋处理后使用右旋处理:RightB1()右旋处理后使用左旋处理。 详细设计 数据结构详细设计: 用二叉链表存储二叉排序树: 2.算法详细设计: 变量的说明: #define EQ(a,b) (a==b) #define LT(a,b) (ab) 此处定义为两个值比较大小 #define LQ(a,b) (ab) #define LH +1 //左高 #define EH 0 //等高 此处定义为高矮的差值 #define RH -1 //右高 调试分析 调试过程中遇到的问题:在调试过程中,插入新结点时,结点指针指的位置不对,导致添加后的二叉树不是左小右大的情况。还有,在输出平衡二叉树时由于输出算法错误导致输出不正确,经过网上找了一些材料,最后输出正确,是有缩进的。 调试时输入应注意:以-2作为输出的结束,输入的应为整数,并且当整数重复时应不接受重复结点的插入; 使用说明和测试结果 使用说明: (1) 创建二叉排序树的时候,应以-2作为结束,每个结点的值域应为整数,并且重复的结点不能插入二叉排序树中; (2) 测试数据: 插入:4 删除:1,2,7 (3)测试结果: 创建排序二叉树: 插入 删除并调平: 心得体会 在课堂中已经学习了平衡二叉树,单说插入,删除都是很好操作的,但是要在插入和删除要平衡,调平时很困难的,指针的应用要很灵活,我在网上找了一些例子有加上自己对课本的熟悉使得我比较困难的完成了这次的实验,可以说这是这些实验中比较难的一个了。但通过这次试验我收获了很多,知道调节二叉树平衡的方法怎么样应用到编程中,巩固了上课时学过的知识。 2.2 插入算法 int Insert(BSTree T, KeyType e,int taller) { if(!T){ T=(BSTree )malloc(sizeof(BSTNode)); T-data=e; T-lchild=NULL; T-rchild=NULL; T-bf=EH; //新插结点的平衡等高 taller=1; } else{ if(EQ(e,T-data)){taller=0;printf(已存在相同关键字的结点\n); return 0;} if(LT(e,T-data)){

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档