数据结构程序设计报告(平衡二叉树).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文档。上传文档
查看更多
数 据 结 构 课 程 设 计 PAGE 1 数学与计算机科学学院数据结构程序设计报告 平衡二叉树 学生姓名: 学 号: 班 级: 指导老师: 报告日期: 题目与要求 . 问题的提出 编写已个平衡二叉树,主要是对插入一个元素导致树不平衡的情况进行平衡化处理以及相关的处理。 设计的知识点 队列的插入,删除,二叉树的建立于销毁,平衡树的平衡化,以及C语言中基础应用于结构等。 功能要求 .通过不断插入的方式创建一棵平衡二叉树,包括输入结点的关键字和相关信息。 按要求输出创建的平衡二叉树结点,包括 顺序(中序)输出和按层次输出。 插入新增的结点,若结点不存在则插入平衡二叉树,并进行相关调整。 销毁二叉树。 退出 菜单界面如下: 功能设计 算法设计 选择创建平衡二叉树后,利用循环不断插入结点,并进行调整,当输入节点为0时停止进入菜单界面。 在平横二叉树排序树BSTree上插入一个新的数据元素e的递归算法可如下描述: 若BSTree为空树,则插入一个数据元素为e的新结点作为BSTree的根结点,树的深度增1; 若e的关键字和BSTree的根节点的关键字相等,则不进行插入; 若e的关键字小于BSTree的根结点的关键字,而且在其左子树中不存在和e形同的关键字的结点,则将e插入在其左子树上,并且当插入之后的左子树的深度加1时,分别就下列不同情况处理之: BSTree的跟结点的平衡因子为-1(右子树的深度大于左子树的深度):则将跟结点的平衡因子更改为0,BBST的深度不变; BBST的根结点的平衡因子为0(左,右子树的深度相等):则将根结点的平衡因子更改为1,BBST的深度增1; BBST的根结点的平衡 因子为1(左子树的深度大于右子树的深度):若BBST的左子树根结点的平衡因子为1,则需进行向左旋平衡处理,并且在右旋之后,将根节点和其右子树根节点的平衡因子更改为0,树的深度不变; 若BBST的左子树根结点的平衡因子为-1,则需进行向左,向右的双向旋转平衡处理,并且在旋转处理之后,修改根结点和其左右子树的平衡因子,数的深度不变; 若e的关键字大于BBST的根结点的关键字,而且在BBST的右子树中不存在和e有相同的关键字的的节点,则将e插入在BBST的右子树上,并且当插入之后的右子树深度增加(+1)时,分别就不同情况处理之。 详细设计 1)结点类型定义: typedef struct ElemType{ KeyType Key; //键值类型 char info[20]; }ElemType; Typedef struct BSTNode{ ElemType data; int bf ; //结点的平衡因子 struct BSTNode *lchild,*rchild;//左右孩子指针 }BSTNode,*BSTree; 调平二叉树(左右调平方式大体雷同,之具体写出其中一种调平方式) 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)

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

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

1亿VIP精品文档

相关文档