数据结构课程设计平衡二叉树操作.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计平衡二叉树操作

课 程 设 计 报 告 课程名称 数据结构课程设计 题 目 平衡二叉树操作 指导教师 设计起止日 2010-5-16 学 院 计算机学院 专 业 软件工程 学生姓名 班级/学号------------ 成 绩 _________________ 需求分析 1、建立平衡二叉树并进行创建、增加、删除、调平等操作。 2、设计一个实现平衡二叉树的程序,可进行创建、增加、删除、调平等操作,实现动态的输入数据,实时的输出该树结构。 3、测试数据:自选数据 概要设计 平衡二叉树是在构造二叉排序树的过程中,每当插入一个新结点时,首先检查是否因插入新结点而破坏了二叉排序树的平衡性,若是,则找出其中的最小不平衡子树,在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。具体步骤如下:    每当插入一个新结点,从该结点开始向上计算各结点的平衡因子,即计算该结点的祖先结点的平衡因子,若该结点的祖先结点的平衡因子的绝对值均不超过1,则平衡二叉树没有失去平衡,继续插入结点;    若插入结点的某祖先结点的平衡因子的绝对值大于1,则找出其中最小不平衡子树的根结点;    判断新插入的结点与最小不平衡子树的根结点的关系,确定是哪种类型的调整;    如果是LL型或RR型,只需应用扁担原理旋转一次,在旋转过程中,如果出现冲突,应用旋转优先原则调整冲突;如果是LR型或RL型,则需应用扁担原理旋转两次,第一次最小不平衡子树的根结点先不动,调整插入结点所在子树,第二次再调整最小不平衡子树,在旋转过程中,如果出现冲突,应用旋转优先原则调整冲突;    计算调整后的平衡二叉树中各结点的平衡因子,检验是否因为旋转而破坏其他结点的平衡因子,以及调整后的平衡二叉树中是否存在平衡因子大于1的结点。typedef struct BTNode { int data; int bf; //平衡因子 struct BTNode *lchild,*rchild;//左、右孩子 }BTNode,*BTree; 调平二叉树(左右调平方式大体雷同,之具体写出其中一种调平方式) if(插入元素与当前根元素相等) { printf(已存在相同关键字的结点\n); } if(插入元素小于当前根元素)) { if(插入新结点不成功) return 0; if(插入成功) switch(查看根的平衡因子) { case +1: 进行左平衡处理; { 检查*T的左子树的平衡度,并作相应平衡处理 { case +1: 令根及其左孩子的平衡因子为0; 做右平衡处理; { BTree lc; lc指向的结点左子树根结点; rc的右子树挂接为结点的左子树; lc的右孩子为原结点; 原结点指向新的结点lc; } break; case -1: rd指向*T的左孩子的右子树根 switch(查看右孩子平衡因子) { case +1: 根的平衡因子为-1; 根左孩子的平衡因子为0; break; case 0: 令根和根左孩子的平衡因子为0; break; case -1: 根平衡因子为0; 根左孩子平衡因子为1; break; } 根右孩子的平衡因子为0; 对*T的左子树作左旋平衡处理; 对*T作右旋平衡处理; } break; case 0: 令根的平衡因子为+1; break; case -1: 令根的平衡因子为-1; break; } } 四.调试分析 在进行对插入新结点并调平时由于利用的是普通的

文档评论(0)

weizhent2017 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档