- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线索二叉树的运算-数据结构与算法课程设计报告
合肥学院
计算机科学与技术系
课程设计报告
2009 ~2010 学年第 二 学期
课程 数据结构与算法 课程设计名称 线索二叉树的运算 学生姓名 侯山虎 学号 0804012006 专业班级 08计本(2)班 指导教师 王昆仑 张贯虹
2010 年 6 月
一、问题分析和任务定义
(1)题目:线索二叉树运算:线索二叉树的应用,实现线索二叉树的建立、插入、删除、恢复线索。
(2)任务定义:
此题目是线索二叉树的一系列操作问题。首先就要明白线索二叉树是什么,利用二叉链表的空指针域将空的左孩子指针域改为指向其前驱,空的右孩子指针域改为指向其后继,这种改变指向的指针称为线索,加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。
(3)分析:
该任务是关于线索二叉树的运算,其中的基本运算应基于二叉树,但又有所不同,首先应解决的问题有:
1,线索二叉树是如何建立的,是通过二叉树来实现线索化,还是直接进行线索化的输入。若由二叉树建立而来,该二叉树应如何输入,对于具体的二叉树应该使初使用者明白输入的格式。
2,该程序重点内容是有关于线索二叉树的插入和删除,在进行具体的操作时,规则是什么,依照什么原则。
3,在线索恢复中,依照插入删除后的二叉树结构,应该如何设计,是单独恢复,还是在两个重点程序中直接恢复线索。
4,对于插入,删除,恢复线索等,其结果是否符合预定的目标,须由自己判定。
由此,可以给出初步的分析:
A。依照书上的相关内容和二叉树的定义,线索二叉树应该是在二叉树依照一定格式输入完毕后,对其进行线索化,线索化初步选定为中序线索化,然后线索化的结果进行输出。
B、插入中,首先就要考虑要怎样在二叉树中插入结点。要插入结点,那么首先就应该考虑要在那里插入结点,那么就引入了结点的查找问题。结点的查找将建立一个独立的子函数。找到了结点的位置以后,由于目标节点有左右子树,设计两种情况,选择后就要考虑怎么插入了。若选择了左子树后,目标节点又有两种情况:一是已经有左子树,二是没有左子树,此时根据相应的情况,设计正确的操作。 在删除中也有类似的操作,不同的是在删除的过程中,因为要考虑被删除结点的左右子树的连接问题,必须知道要查找结点的父亲结点。那么就需要另外一个子函数来查找孩子结点的父亲结点。被删除结点和其父亲结点确定以后,就要考虑删除过程中的各种情况。
C、恢复线索过程中,由于和插入删除操作分离后考虑的过程复杂,并且从设计的目标来说应该是要在删除和插入的过程中实现对线索的恢复,故选择了插入删除中直接恢复线索。
D、在输出中,输出的操作分为两个一是专门用于二叉树的输出判别是否是要线索化的二叉树,此时用中序输出来体现二叉树的结点情况。二是以输出线索来观察在各种操作的过程中线索的变化情况。
(4)测试用例:
其中@为虚节点,#为结束标记:
1.输入数据:abc@d# 完全二叉树
插入结点为信息为 t;
插入的位置在点:c
删除结点为 t;
插入删除完成后得:
线索输出得:b-d-a-c-
2.输入数据:abcde@f#
插入结点为r ;
插入的位置在b点,没有左孩子的情况
删除结点为 d;
插入删除完成后得:
线索输出得:b-r-a-c-
二、数据结构的选择和概要设计
(1)数据结构的选择:
因为此程序就是对二叉树进行各种操作,所以程序中必然使用的是树形结构。在将树存储到计算机中时,就有了为存树而使用的存储结构。因为对线索有大量的操作,所以选择链接存储结构。在存储的过程中还使用了队类型的数据结构。
队的定义为:BItree *Q[maxlen]; //存放建树过程中的每个结点的指针
树的结点类型定义为:
Typedef struct node{
Int ltag , rtag; //用来指示指针域指的为孩子还是前驱或后继
char data; //存放结点信息
struct node *lchild , *rchild; //记录孩子结点信息
}Bithptr;
结构图如图1为:
图1结构图
二叉树的存储结构如图2:
图2二叉树的存储结构
数据选择原因:
要存储树在计算机中,为了使用链接存储结构,就要对结点进行设计。要存储结点信息就要有data域来存储信
文档评论(0)