数据结构课程设计-带父亲节点的平衡二叉树的建立汇.doc

数据结构课程设计-带父亲节点的平衡二叉树的建立汇.doc

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

沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:数据结构课程设计 课程设计题目:带父亲节点的平衡二叉树的建立 院(系):计算机学院 专 业:网络工程 班 级: 学 号: 姓 名:夏媛 指导教师:郑志勇 目 录 1 课程设计介绍 1 1.1 课程设计内容 1 1.2课程设计要求 1 2 课程设计原理 2 2.1 课设题目粗略分析 2 2.2 原理图介绍 2 2.2.1 功能模块图 2 2.2.2 流程图分析 3 3 数据结构分析 8 3.1 存储结构 8 3.2 算法描述 8 4 调试与分析 10 4.1 调试过程 10 4.1程序执行过程 11 参考文献 12 附 录(关键部分程序清单) 13 1 课程设计介绍 1.1 课程设计内容 设计程序,建立带有父亲结点的平衡二叉树,系统主要功能是:从键盘上输入一整数序列,建立一颗平衡二叉树。 1.2课程设计要求 要能够形象方便的观察树的结构; 要能够形象的演示树的平衡过程; 课程设计报告必须符合课程设计报告规范; 提交合格的报告后,经指导老师测试程序后,课设完成。 2 课程设计原理 2.1 课设题目粗略分析 根据课设题目要求,我将整体程序分为四大模块,这四个模块相互独立,没有任何嵌套调用的情况,以下是四个模块的大体分析: (1)判断模块:在插入一个关键字时,首先先对该关键字进行判断,如果该关键字已经存在则不插入,否则插入该关键字,调用函数InsertAVL()。 (2)左子树插入模块:如果判断完的新关键字插在左子树上,则对该以指针p所指结点为根的二叉树作左平衡旋转处理,本算法结束时,指针p指向新的根结点,调用函数LeftProcess()RightProcess()。DispBSTree().2 原理图介绍 主函数主要实现的功能是函数调用,主函数首先对输入的关键字进行判断,调用函数InsertAVL()LeftProcess(DispBSTree()DispBSTree().2.2 流程图分析 1.主函数流程图 主函数主要实现的功能是函数调用,主函数首先对输入的关键字进行判断,若该关键字在已建树中已经存在,则返回主函数接着对下一个关键字进行判断。若该关键字在已建树中不存在,则插入该数,当所有的关键字都插入完事之后,进行输出。流程图如图2.1所示。 图2.1 主函数流程图 2.判断模块流程图 若在平衡二叉排序树b中不存在和e有相同关键字的结点,则插入一个数据元素为e的新结点,并返回1,否则返回0。若因插入而使二叉排序树失去平衡,则作平衡旋转处理,布尔变量taller反映b长高与否。流程图如图2.2所示。 图2.2 判断模块流程图 3.左子树插入模块流程图 断完的新关键字插在左子树上,则对该以指针p所指结点为根的二叉树作左平衡旋转处理,本算法结束时,指针p指向新的根结针。流程图如图2.3所示。 图2.3左子树插入模块流程图 4.右子树插入模块流程图 断完的新关键字插在右子树上,则对该以指针p所指结点为根的二叉树作右平衡旋转处理,本算法结束时,指针p指向新的根结针。流程图如图2.4所示。 图2.4 右子树插入模块流程图 3 数据结构分析 3.1 存储结构 定义一个关键字类型的字符数组,其空间足够大,用来存放关键字。 3.2 算法描述 1.判断关键字算法如下: {//若在平衡二叉排序树b中不存在和e有相同关键字的结点,则插入一个数据元素为e的新结点, if(b==NULL) //原树为空,插入新结点,树长高,置taller为1 {b=(BSTNode*)malloc(sizeof(BSTNode)); b-key=e; b-lchild=b-rchild=NULL; b-bf=0; taller=1;} else {if(e==b-key) //树中已存在和e有相同关键字的结点则不插入 {taller=0; return 0;} if(eb-key) //继续在*b的左子树中进行搜索 {if((InsertAVL(b-lchild,e,taller))==0) //未

文档评论(0)

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

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

1亿VIP精品文档

相关文档