线索二叉树课程设计说明书-模板
数据结构课程设计_线索二叉树的生成及其遍历

数据结构课程设计题目: 线索二叉树的生成及其遍历学院:班级:学生姓名:学生学号:指导教师:2012 年12月5日课程设计任务书摘要针对以二叉链表作为存储结构时,只能找到结点的左、右孩子的信息,而得不到结点的前驱与后继信息,为了使这种信息只有在遍历的动态过程中才能得到。
增设两个指针分别指示其前驱和后继,但会使得结构的存储密度降低;并且利用结点的空链域存放(线索链表),方便。
同时为了记下遍历过程中访问结点的先后关系,附设一个指针pre始终指向刚刚访问过的结点,若指针 p 指向当前访问的结点,则 pre指向它的前驱。
由此得到中序遍历建立中序线索化链表的算法本文通过建立二叉树,实现二叉树的中序线索化并实现中序线索二叉树的遍历。
实现对已生成的二叉树进行中序线索化并利用中序线索实现对二叉树的遍历的效果。
关键词二叉树,中序线索二叉树,中序线索二叉树的遍历目录摘要 ............................................. 错误!未定义书签。
第一章,需求分析.................................. 错误!未定义书签。
第二章,概要设计.. (1)第三章,详细设计 (2)第四章,调试分析 (5)第五章,用户使用说明 (5)第六章,测试结果 (5)第七章,绪论 (6)第八章,附录参考文献 (7)线索二叉树的生成及其遍历第一章需求分析以二叉链表作为存储结构时,只能找到结点的左、右孩子的信息,而得不到结点的前驱与后继信息,为了使这种信息只有在遍历的动态过程中才能得到。
增设两个指针分别指示其前驱和后继,但会使得结构的存储密度降低;并且利用结点的空链域存放(线索链表),方便。
同时为了记下遍历过程中访问结点的先后关系,附设一个指针pre始终指向刚刚访问过的结点,若指针 p 指向当前访问的结点,则 pre指向它的前驱。
由此得到中序遍历建立中序线索化链表的算法本文通过建立二叉树,实现二叉树的中序线索化并实现中序线索二叉树的遍历。
线索二叉树

6·4 线索二叉树1、线索二叉树的结点结构二叉树的遍历本质上是将一个复杂的非线性结构转换为线性结构,使每个结点都有了唯一前驱和后继(第一个结点无前驱,最后一个结点无后继)。
对于二叉树的一个结点,查找其左右子女是方便的,其前驱后继只有在遍历中得到。
为了容易找到前驱和后继,有两种方法。
一是在结点结构中增加向前和向后的指针fwd和bkd,这种方法增加了存储开销,不可取;二是利用二叉树的空链指针。
现将二叉树的结点结构重新定义如下:其中:ltag=0 时ltag=1 时lchild指向前驱;rtag=0 时rchild指向左子女;rtag=1 时rchild指向后继;以这种结点结构构成的二叉链表作为二叉树的存储结构,叫做线索链表,指向前驱和后继的指针叫线索,加上线索的二叉树叫线索二叉树,对二叉树进行某种形式遍历使其变为线索二叉树的过程叫线索化。
学习线索化时,有三点必须注意:一是何种“序”的线索化,是先序、中序还是后序;二是要“前驱”线索化、“后继”线索化还是“全”线索化(前驱后继都要);三是只有空指针处才能加线索。
2、对二叉树进行中序线索化的算法bithptr *pre; /* 全程变量*/void INTHREAD(bithptr *p){if(p!=NULL){ INTHREAD(p->lchild); /* 左子树线索化*/if(p->lchild==NULL) { p->ltag=1;p->lchild=pre;}if(p->rchild==NULL) p->rtag=1;if(pre!=NULL && pre->rtag==1) pre->rchild=p;pre=p; /* 前驱指向当前结点*/INTHREAD(p->rchild); /* 右子树线索化*/}3、在线索二叉树上查找前驱和后继(1)中序线索二叉树:若结点的ltag=1,lchild指向其前驱;否则,该结点的前驱是以该结点为根的左子树上按中序遍历的最后一个结点。
线索二叉树的应用

课程设计说明书(数据结构课程设计)专业: 网络工程课程名称: 数据结构课程设计班级: 网络B11-1 设计题目: 线索二叉树的应用设计时间: 2013-2-25 至2013-3-8评语:_____________________________________________________________________________________________________________________________________________________________________________________________________评阅成绩:____评阅教师:__一、问题描述与需求分析1、问题描述本实验的问题是建立一个线索二叉树,并实现线索二叉树的插入、删除、恢复线索等功能。
2、功能需求分析本程序要实现的功能是:1. 线索二叉树的建立。
2.线索二叉树的插入。
3.线索二叉树的删除。
4.线索二叉树的恢复。
想要完成上面的功能,我们首先是要知道上面是线索二叉树。
我们可以从数据结构的书上找到答案,利用二叉链表的空指针域将空的左孩子指针域改为指向其前驱,空的右孩子指针域改为指向其后继。
这种改变指向的指针称为线索,加上了线索的二叉链表称为线索链表。
N个结点的二叉链表中含有n+1个空指针域。
利用二叉链表中的空指针域,存放指向结点的在某种遍历次序下的前驱和后继结点的指针,这种加上了线索的二叉链表称为线索链表。
相应的二叉树称为线线索二叉树。
根据线索二叉树性质的不同,线索二叉树可以分为前序线索二叉树,中序线索二叉树和后续线索二叉树三种,此次课程设计中使用的是中序线索二叉树。
二、概要设计1、总体设计思路首先就是要建立一个二叉树,然后再对二叉树进行线索化。
线索链表中的结点结构为:其中:线索二叉树及其存储结构如在线索树上进行遍历,只需先找到序列中的第一个结点,然后依次找结点后继为空时而止。
数据结构课程设计报告之线索二叉树

线索二叉树一目的程序从文件中读取每个结点的信息,然后建立一个二叉树。
通过菜单的形式,选择不同的线索化方式,然后再对线索化的二叉树经行遍历并输出对应的结果。
二需求分析1、文件的读入程序首先要从一个文件中读入结点的信息。
故需建立一个文件,在文件中,给出每个结点的信息。
2、菜单的实现由于需要建立两种不同的线索二叉树,故需要一个菜单,来选择需要进行的操作,并输出操作的结果。
3、树的建立从文件中,读入每个结点的信息。
然后建立起树,然后再对已建立的树进行相应的线索化。
4、树的线索化根据菜单的选择,对已建立的树经行相对应的线索化。
5、输出遍历的结果对每种不同的线索化的的树,给出相对应的算法。
然后,根据算法把每种遍历的结果输出。
三概要设计1、主程序模块(1)主程序模块int main(){welcome(); //通过welcome()模块来让用户控制,做线索化的工作。
return 0;}(2)可线索化单元模块—实现各种线索化的抽象数据类型;通过welcome()模块来调用每个线索化模块。
2、建立二叉树的模块bool CreatBinTree();函数会根据用户输入的文件名,打开一个存储了树中每个结点的文件,且是用广义表的形式给出结点信息的文件。
操作结果:根据文件中广义表的形式,建立相对应的二叉树,该树的根节点为root。
3、线索化的抽象数据类型void CreatInThread();void CreatInThread(Node *current,Node *&front)current是中序遍历下,当前遍历的结点的指针。
front是中序遍历下,current结点的前驱的指针。
操作结果:对建立的二叉树完成中序线索化。
void CreatPostThread();void CreatPostThread(Node *current,Node *&front)current是后续遍历下,当前遍历的结点的指针。
二叉树数据结构课程设计报告

数据结构课程设计报告题目:线索二叉树的应用院(系):计算机工程学院专业:嵌入式系统软件设计方向班级:嵌入式109(1)学生:黄江彬指导教师:寇海洲殷路邱军林孙成富2010年12月目录1.设计目的 (3)2.总体设计 (3)2.1首先创建一个线索二叉树 (3)2.2功能函数的实现 (4)3.调试分析 (7)4.测试结果 (7)5课程设计小结. (10)1.设计目的线索二叉树的应用:创建线索二叉树,实现二叉树的建立,插入,删除,恢复线索的算法。
2.总体设计实现过程和步骤提示:2.1首先创建一个线索二叉树2.1.1功能说明:程序首先显示创建线索二叉树的界面,并等待用户输入命令(见图1-1所示)。
假如用户输入ABCE##F##D##G##,程序将在显示屏上输出运算结果(见图1-2所示)。
图1-1图1-22.1.2创建线索二叉树的程序代码://创建二叉树ABD#GJ##K##E##C#FH##IL### ABCD##E###F#GH##I#J#K## void Creat(Bitree *p) //指向指针的指针{char ch=getchar();if(ch=='#')(*p)=NULL;else{//Bitree k;*p=(Bitreenode *)malloc(sizeof(Bitreenode));(*p)->data=ch;Creat(&(*p)->lchild);Creat(&(*p)->rchild);}//return 1;}2.1.3创建线索二叉树系统菜单实现提示:(1).遇“#”则该结点为空;(2).直接从键盘获取字符串.2.2功能函数的实现2.2.1二叉树的遍历2.2.1.1功能说明:对用户输入的二叉树进行遍历2.2.1.2二叉树的遍历程序代码://先序遍历void First(Bitree p){if(p){printf("%2c",p->data);First(p->lchild);First(p->rchild);}}//中序遍历void Middle(Bitree p){if(p){Middle(p->lchild);printf("%2c",p->data);Middle(p->child);}//后序遍历void Last(Bitree p){if(p){Last(p->lchild);Last(p->rchild);printf("%2c",p->data);}}2.2.1.3遍历二叉树功能实现提示:(1).用户输入二叉树后函数自动对所输入二叉树进行遍历。
线索二叉树的实现

线索⼆叉树的实现数据结构课程设计设计说明书线索⼆叉树的实现学⽣姓名学号班级成绩指导教师曹记东计算机科学与技术系2010年9⽉10⽇数据结构课程设计评阅书题⽬线索⼆叉树的实现学⽣姓名学号指导教师评语及成绩指导教师签名:年⽉⽇答辩评语及成绩答辩教师签名:年⽉⽇教研室意见总成绩:室主任签名:年⽉⽇课程设计任务书2010—2011学年第1学期专业:计算机科学与技术学号:姓名:课程设计名称:数据结构课程设计设计题⽬:线索⼆叉树的实现完成期限:⾃2010 年8 ⽉30 ⽇⾄2010 年9 ⽉10 ⽇共 2 周设计内容:n个结点的⼆叉链表中含有n+1个空指针域。
利⽤⼆叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。
这种加上了线索的⼆叉树称为线索⼆叉树(Threaded BinaryTree)。
对⼀棵⾮线索⼆叉运⽤VC++编写⼀个程序实现前序线索⼆叉树、中序线索⼆叉树和后序线索⼆叉树,其中遍历要求⽤先左后右的递归或⾮递归算法来实现。
要求:1)阐述设计思想,画出流程图;2)任意建⽴⼀棵⼆叉树,采⽤前序、中序、后序三种⽅法线索化⼆叉树;3)说明测试⽅法,写出完整的运⾏结果;4)从时间、空间对算法分析;5)较好的界⾯设计;6)编写课程设计报告。
以上要求中第⼀个阶段的任务完成后,先将设计说明书的草稿交指导⽼师⾯审,审查合格后⽅可进⼊后续阶段的⼯作。
设计⼯作结束后,经指导⽼师验收合格后将设计说明书打印装订,并进⾏答辩。
指导教师(签字):教研室主任(签字):批准⽇期:年⽉⽇摘要设计了⼀个对线索⼆叉树实现遍历的软件,该软件可以实现对线索⼆叉树分别进⾏先序遍历、中序遍历、后序遍历。
这种遍历⽅法是以线索为根本,利⽤该软件,⽤户可以⽅便的查找树中任意结点的前驱和后继,给⽤户带来了⽅便。
该软件采⽤了VC6.0作为软件开发环境,实现对线索⼆叉树的遍历。
操作简单,界⾯清晰,易于⽤户接受。
《数据结构遍历二叉树》课程设计报告书

数据结构课程设计说明书题目: 遍历二叉树院系:专业班级:学号:学生姓名:同组人:指导教师:年月日目录一、需求分析 (2)1.主功能模块 (2)2.创建树模块 (2)3.遍历树模块 (2)二、概要设计 (3)1.功能设计 (3)(1)创建二叉树 (3)(2)先序递归遍历 (3)(3)中序递归遍历 (3)(4)后序递归遍历 (3)(5)先序非递归遍历 (3)(6)中序非递归遍历 (4)(7)后序非递归遍历 (4)(8)层序非递归遍历 (4)2.算法流程图 (4)三、详细设计 (12)1.界面设计 (12)2.详细代码分析 (14)(1)主模块 (14)(2)创建树模块 (15)(3)遍历树模块 (16)(4)源程序清单 (16)3.调试分析 (35)(1)调试结果 (35)(2)算法分析 (36)四、心得体会 (37)五、参考文献 (38)一、需求分析在现实世界层次化的数据模型中,数据与数据之间的关系纷繁复杂。
其中很多关系无法使用简单的线性结构表示清楚,比如祖先与后代的关系、整体与部分的关系等。
于是人们借鉴自然界中树的形象创造了一种强大的非线性结构——树。
树形结构的具体形式有很多种,其中最常用的就是二叉树。
而二叉树的多层次遍历遍历则是二叉树的重要内容。
本程序用Microsoft Visual C++ 6.0编写,可以实现对二叉树的多种方式的创建、采用递归和非递归等两种方式先序、中序、后序进行遍历。
1.主功能模块通过合理的界面设计,根据提示信息,使用者可以方便快捷地运行本程序来完成创建、遍历二叉树等操作。
界面美观,人性化,程序智能,安全性高。
2.创建树模块当进入程序运行界面后,根据提示输入需要建立的二叉树,共有三种方法来创建二叉树,即:1:广义表构造法、2:先序和中序构造法、3:中序和后序构造法。
建立完二叉树后自动进入下一个功能模块。
3.遍历树模块实现对该二叉树的先序递归遍历、先序非递归遍历、中序递归遍历、中序非递归遍历、后序递归遍历、后序非递归遍历、层序非递归遍历等方式的遍历操作,并输出各遍历序列。
(完整word版)线索二叉树课程设计说明书格式

中北大学课程设计说明书学院、系:软件学院专业:软件工程班级:15140X04学生姓名:张航学号:1514040423设计题目:线索二叉树的应用起迄日期:2016年12月16日~2016年12月29日指导教师:付东来日期: 2016年12月29日1 设计目的《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论.进行数据结构课程设计要达到以下目的:⏹了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;⏹初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;⏹提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2 任务概述设计内容:(1)建立线索二叉树,实现插入、删除操作。
(2)线索二叉树的遍历(本程序中使用中序遍历方法)设计要求:实现线索树建立、插入、删除、恢复线索任务分析:该任务是关于线索二叉树的运算,其中的基本运算应基于二叉树,但又有所不同,首先应了解问题有:(1)线索二叉树如何建立:是通过二叉树来实现线索化,还是直接进行线索化的输入。
若由二叉树建立而来,该二叉树应如何输入,对具体的二叉树应该使初次使用者明白使用的格式。
(2)该程序重点内容是有关二叉树的插入、删除和查找前驱后继,在进行具体操作时,该如何实现查找到相应结点,线索应该如何改变才能不破坏线索二叉树的结构。
重点在于插入删除是分清楚插入删除位置的双亲结点与被插入删除的结点的孩子关系.3 模块划分(1)定义数据结构模块:typedef struct BiThrNode{ElemType data;struct BiThrNode *lchild,*rchild;int LTag,RTag;}BiThrNode,*BiThrTree;(2)功能函数:二叉树的建立函数:void CreateBiTree(BiThrTree &T)询二叉树深度函数:int Depth(BiThrTree T)带头结点的二叉树中序线索化函数:void InOrderThreading(BiThrTree &Thrt,BiThrTree T)以结点T为根的子树中序线索化:void InThreading(BiThrTree &T)中序遍历函数:void InOrderTraverse_Thr(BiThrTree Thrt)查找某结点函数:BiThrTree Search(BiThrTree T,ElemType key)查找某结点函数:BiThrTree SearchPre(BiThrTree point,BiThrTree child)插入函数:Status InsertTree(BiThrTree T)删除函数:Status DeleteTree(BiThrTree T)主函数:main()整体结构图:4 主要函数说明及其N—S图4.1详细设计思想建立二叉树(即指在内存中建立二叉树的存储结构),建立一个二叉链表,需按某种顺序一次输入二叉树中的结点,且输入顺序必须隐含结点间的逻辑结构信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学与计算机学院课程设计说明书课程名称: 数据结构与算法课程设计课程代码:题目: 线索二叉树的应用年级/专业/班: 2010级软件1班学生姓名:学号: 1127开始时间:2011 年12 月9 日完成时间:2011 年12 月23 日课程设计成绩:1指导教师签名:年月日摘要首先是对需求分析的简要阐述,说明系统要完成的任务和相应的分析,并给出测试数据。
其次是概要设计,说明所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次关系,以及ADT描述。
然后是详细设计,描述实现概要设计中定义的基本功操作和所有数据类型,以及函数的功能及代码实现。
再次是对系统的调试分析说明,以及遇到的问题和解决问题的方法。
然后是用户使用说明书的阐述,然后是测试的数据和结果的分析,最后是对本次课程设计的结论。
关键词:线索化;先序遍历;中序遍历;后续遍历线索二叉树的运用引言数据结构是计算机专业重要的专业基础课程与核心课程之一,在计算机领域应用广泛,计算机离不开数据结构。
数据结构课程设计为了能使我们掌握所学习的知识并有应用到实际的设计中的能力,对于掌握这门课程的学习方法有极大的意义。
本课程设计的题目为“线索二叉树的应用”,完成将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树的操作。
本课程设计采用的编程环境为Microsoft Visual Stdio 2008。
目录1需求分析 (3)2开发及运行平台 (4)3 概要设计 (5)4 详细设计 (7)5 调试分析 (12)6 测试结果 (13)7 结论 (18)致谢 (19)参考文献 (20)附录 (21)1、需求分析为了能更熟练精准的掌握二叉树的各种算法和操作,同时也为了开拓视野,综合运用所学的知识。
为此,需要将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树,以实现线索树建立、插入、删除、恢复线索等。
1.1任务与分析中次系统要实现对二叉树的建立,以及线索化该二叉树,同时实现对其先序、中序、后序线索话的并输出结果。
1.2测试数据表1:入的二叉树结点序号和数据线索二叉树的运用- 3 -2开发及运行平台开发平台:Microsoft Visual Studio 2008运行平台:Windows XP/2003/73 概要设计3.1 ADT描述ADT BiTree{数据对象:D={“树节点”};数据关系:R={H}若D=∮为空,则R=∮,Tree为空树;若D仅有一个数据元素,则R=∮;否则R={H}详细描述如下:D中存在唯一的称之为根的节点root,它在关系H下无前驱;1.若D-{root}≠∮,则存在对根以外剩余元素的一个划分D1、D2......,Dm(m>0),并对任意j≠k(1≦j≦m,1≦k≦m)有Dj∩Dk=∮;且对任意i(1≦i≦m)唯一存在数据元素xi∈Di,有二元关系<root,xi>∈H。
这里描述的是从总节点到各个子树根节点xi的边。
2.对应于D-{root}的划分,关系集H-{<root,x1>,<root,x2>,......<root,xm>}也有唯一的划分H1、H2......Hm(m>0),并且对任意的j≠k(1≦j≦m,1≦k≦m)有Hj∩Hk=∮,对任意的i(1≦i≦m),Hi是Di上的二元关系,则(Di,{H})是一颗树,且是root的子树。
基本操作:void creat ();//创建一个二叉树。
void inorder ();//中序便利。
void ThTree::threpreorder ();//先序遍历二叉树。
void ThTree::threinorder ();//中序遍历二叉树。
void ThTree::threpostorder ();//后序遍历二叉树。
void ThTree::destroy ();//删除线索二叉树。
int main();//主函数。
}线索二叉树的运用- 5 -3.2程序模块结构图2 程序模块结构3.2.1 结构体定义书的结构体定义如下:struct ThreNode //定义结点结构体 {ElemType data;ThreNode *lch;ThreNode *rch;int ltag,rtag;};3.3 各功能模块新建模块: void ThTree::creat ()新建二叉树并储存。
树类模块:void ThTree ()定义书的结点,孩子以及各成员函数。
先序遍历模块: void ThTree::threpreorder ()对树进行先序线索遍历。
中序遍历模块: void ThTree::threinorder ()对树进行中序线索遍历。
后序遍历模块: void ThTree::threpostorder()对树进行后序线索遍历。
删除模块: void ThTree::destroy ():删除所有节点。
4 详细设计4.1结构体定义树的结构体定义如下:struct ThreNode //定义结点结构体{ThreType data;ThreNode *lch;ThreNode *rch;int ltag,rtag;};4.2 初始化构造函数初始化变量,定义双亲结点和左右标志域以及根结点:void ThTree::creat() //建立二叉树{ThreNode *q,*s[20]; ElemType x; int i,j;cout<<"\n请按二叉树的层序自上而下自左至右顺序组织数据"<<endl;cout<<"\n每次输入结点的序号和数据,假设根结点值是11;"<<endl;cout<<"\n那么输入应该是:1 11"<<endl;cout<<"\ni,x=";cin>>i>>x;while(i!=0&&x!=0){q=new ThreNode; //产生一个接点q->data=x;q->lch=NULL;q->rch=NULL;q->ltag=0;q->rtag=0; //左右标志域s[i]=q;if(i==1)root=q; //q为根接点else{j=i/2;if((i%2)==0)s[j]->lch=q;else s[j]->rch=q; //j为双亲结点编号线索二叉树的运用- 7 -} cout<<"\ni,x=";cin>>i>>x;}}4.3 新建操作void ThTree::creat() //建立二叉树 {ThreNode *q,*s[20]; ElemType x; int i,j;cout<<"\n 请按二叉树的层序自上而下自左至右顺序组织数据"<<endl;cout<<"\n 每次输入结点的序号和数据,假设根结点值是11;"<<endl;cout<<"\n 那么输入应该是:1 11"<<endl;cout<<"\ni,x=";cin>>i>>x;while(i!=0&&x!=0){q=new ThreNode; //产生一个接点q->data=x;q->lch=NULL;q->rch=NULL;q->ltag=0;q->rtag=0; //左右标志域s[i]=q;if(i==1)root=q; //q 为根接点else{j=i/2;if((i%2)==0)s[j]->lch=q;else s[j]->rch=q; //j 为双亲结点编号} cout<<"\ni,x=";cin>>i>>x;}}void ThTree::threpreorder(ThreNode *p,ThreNode *pre) //先根线索化二叉树 {if(p!=NULL){cout<<p->data<<" ";if(p->lch==NULL){p->lch=pre;p->ltag=1;}pre=p;if(p->ltag==0)threpreorder(p->lch,pre);threpreorder(p->rch,pre);4.4、录入信息int main (){int k;ThTree root0;do{cout<<"\n\n";cout<<"\n\n 1.建立二叉树";cout<<"\n\n 2.中序递归线索二叉树";cout<<"\n\n 3.先序线索化二叉树";cout<<"\n\n 4.后续线索化二叉树";cout<<"\n\n 5.结束程序运行";cout<<"\n\n 请输入您的选择:";cin>>k;switch(k)}4.5先序遍历线索化操作void ThTree::threpreorder(ThreNode *p,ThreNode *pre) //先根线索化二叉树{if(p!=NULL){cout<<p->data<<" ";if(p->lch==NULL){p->lch=pre;p->ltag=1;}pre=p;if(p->ltag==0)threpreorder(p->lch,pre);threpreorder(p->rch,pre);}}线索二叉树的运用- 9 -4.6中序遍历线索化操作void ThTree::threinorder(ThreNode *p,ThreNode *pre) //中根线索化二叉树 {if(p!=NULL){threinorder(p->lch,pre);{p->lch=pre;p->ltag=1;}if(pre!=0&&pre->rch==0){pre->rch=p;pre->rtag=1;}pre=p;threinorder(p->rch,pre);}}4.7后续遍历线索化操作void ThTree::threpostorder(ThreNode *p,ThreNode *pre)//后根线索化二叉树 {if(p!=NULL){threpostorder(p->lch,pre);threpostorder(p->rch,pre);cout<<p->data<<" ";if(p->lch==NULL){p->lch=pre;p->ltag=1;}pre=p;}}4.8主函数int main (){int k;ThTree root0;do{cout<<"\n\n";cout<<"\n\n 1.建立二叉树";cout<<"\n\n 2.中序递归线索二叉树";cout<<"\n\n 3.先序线索化二叉树 ";cout<<"\n\n 4.后续线索化二叉树";cout<<"\n\n 5.结束程序运行";cout<<"\n\n 请输入您的选择:";cin>>k;switch(k){case 1:{cout<<"\n 建立二叉树:";root0.creat();}break;case 2:{cout<<"\n 中序递归线索二叉树的结果:";root0.threinorder();}break;case 3:{cout<<"\n 先序递归线索二叉树的结果:";root0.threpreorder();}break;case 4:{cout<<"\n 后续递归线索化二叉树的结果:";root0.threpostorder();}break;}}while(k>=0&&k<5);_getch();return 0;}5 调试分析线索二叉树的运用- 11 -5.1测试数据测试数据见表1.5.2调试问题在测试过程中没有给测试者提供相关的录入信息要求,导致录入要求不合格,程序不能正常运行,经过添加了录入信息提示之后就解决了这个问题。