线索二叉树课程设计

合集下载

数据结构课程设计_线索二叉树的生成及其遍历

数据结构课程设计_线索二叉树的生成及其遍历

数据结构课程设计题目: 线索二叉树的生成及其遍历学院:班级:学生姓名:学生学号:指导教师:2012 年12月5日课程设计任务书摘要针对以二叉链表作为存储结构时,只能找到结点的左、右孩子的信息,而得不到结点的前驱与后继信息,为了使这种信息只有在遍历的动态过程中才能得到。

增设两个指针分别指示其前驱和后继,但会使得结构的存储密度降低;并且利用结点的空链域存放(线索链表),方便。

同时为了记下遍历过程中访问结点的先后关系,附设一个指针pre始终指向刚刚访问过的结点,若指针 p 指向当前访问的结点,则 pre指向它的前驱。

由此得到中序遍历建立中序线索化链表的算法本文通过建立二叉树,实现二叉树的中序线索化并实现中序线索二叉树的遍历。

实现对已生成的二叉树进行中序线索化并利用中序线索实现对二叉树的遍历的效果。

关键词二叉树,中序线索二叉树,中序线索二叉树的遍历目录摘要 ............................................. 错误!未定义书签。

第一章,需求分析.................................. 错误!未定义书签。

第二章,概要设计.. (1)第三章,详细设计 (2)第四章,调试分析 (5)第五章,用户使用说明 (5)第六章,测试结果 (5)第七章,绪论 (6)第八章,附录参考文献 (7)线索二叉树的生成及其遍历第一章需求分析以二叉链表作为存储结构时,只能找到结点的左、右孩子的信息,而得不到结点的前驱与后继信息,为了使这种信息只有在遍历的动态过程中才能得到。

增设两个指针分别指示其前驱和后继,但会使得结构的存储密度降低;并且利用结点的空链域存放(线索链表),方便。

同时为了记下遍历过程中访问结点的先后关系,附设一个指针pre始终指向刚刚访问过的结点,若指针 p 指向当前访问的结点,则 pre指向它的前驱。

由此得到中序遍历建立中序线索化链表的算法本文通过建立二叉树,实现二叉树的中序线索化并实现中序线索二叉树的遍历。

线索二叉树课程设计说明书-模板

线索二叉树课程设计说明书-模板

数学与计算机学院课程设计说明书课程名称: 数据结构与算法课程设计课程代码:题目: 线索二叉树的应用年级/专业/班: 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、上机将线索二叉树的线索链表存储表示的创建和遍历算法实现。

3、进行简单的输入输出验证。

实验内容:编程实现二叉树的线索链表存储表示的基本操作,这些基本操作包括:线索二叉树的创建、线索二叉树的中序遍历算法的实现。

要求对程序中的一些关键语句要有注释,并能够进行简单的输入输出验证。

参考代码#include <stdlib.h>#include <stdio.h>#define OVERFLOW 0//线索二叉树的二叉链表存储定义typedef enum PointerTag {LINK=0,THREAD=1};struct BiThrNode{char data;struct BiThrNode * lchild, * rchild;PointerTag LTag, RTag;};typedef struct BiThrNode BiThrNode;typedef BiThrNode * BiThrTree;/*****************************************************************\** 按先序次序输入二叉树中的结点的值(一个字符)构造二叉链表表示的二叉树,* 字符'#'表示空树。

** 例如,一棵二叉树的三种遍历次序为:* 先序:-+a*b-cd/ef 中序:a+b*c-d-e/f 后序:abcd-*+ef/* 程序中应该输入:-+a##*b##-c##d##/e##f##** 又如,一棵二叉树的三种遍历次序为:* 先序:ABDFGCEH 中序:BFDGACHE 后序:FGDBHECA* 程序中应该输入:AB#DF##G##C#EH###*\******************************************************************/ void CreateBiTree(BiThrTree &T){char ch;ch = getchar();if (ch=='#') T=NULL;else{if (!(T = (BiThrNode *)malloc(sizeof(BiThrNode)))) exit(OVERFLOW);T->data = ch;T->LTag = LINK;T->RTag = LINK;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}return;}//CreateBiTreevoid PrintBiTree(BiThrTree T){//按中序遍历次序输出二叉树T中的结点的值(一个字符),二叉树T用二叉链表存储。

二叉树的排序 课程设计

二叉树的排序   课程设计

计算机与信息科学系内容:数据结构课程设计姓名:学号:班级:目录一、课程设计的要求1.项目要求二、需求分析三、概要设计1.数据结构2.模块划分四、详细设计1.创建二叉树2.在链接栈中实现二叉树的入栈和出栈,及取栈顶元素3.参差遍历打印二叉树4.递归方法的的二叉树遍历操作5.交换左右树,成为一棵新树6.非递归方法的二叉树遍历操作7.主函数五、运行结果一、课程设计的要求1.项目要求二叉树的中序、前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。

要求:1)建立二叉树链表结构;2)建立链栈结构;3)二叉树的非递归层次序遍历函数;4)二叉树的中序、前序和后序的递归遍历算法;5)二叉树的中序、前序和后序的非递归遍历算法;6)主函数:调用各函数,输出结果。

注:遍历的内容应是千姿百态的。

1二、需求分析输入树形结构的内容,建一棵二叉树;(1)二叉树的链表结构;(2)二叉树的链栈结构;(3)二叉树的非递归(栈)层次序遍历,输出结果。

(4)递归的排序方法:1.前序2.中序3.后序,输出结果。

(5)非递归的排序方法:1.前序2.中序3.后序,输出结果。

三、概要设计1.数据结构typedef struct TREE{ //定义链表结构char data;struct TREE *lchild;struct TREE *rchild;}tree;typedef struct Stack{ //定义链接栈结构tree *t;int flag;struct Stack *link;}stack;2.模块划分(函数原形的清单)1)建立二叉树tree *Creatbitree()2)基本运算void push(stack **top,tree *tree) //树结点入栈void pop(stack **top,tree **T) //出栈,栈内元素赋值给树结点void getTop(stack*s,tree **t) //获取栈顶元素33)层次序的非递归遍历算法void Output(tree *t) //层次打印树结点,中序遍历,采用链接栈的迭代法4)递归遍历函数void PreOrder(tree *b1) //前序遍历函数void MidOrder(tree *b2)//中序遍历函数void LastOrder(tree *b3)//后序遍历函数5)非递归遍历函数void unPreOrder(tree *head)//非递归的前序遍历函数void unMidOrder(tree *t)//非递归的中序遍历函数void unPostOder(tree *t)//非递归后序遍历函数4四、详细设计1.创建二叉树tree *Creatbitree(){char ch;tree *b;ch=getchar();if(ch==’@’) b=NULL;else{b=(tree *)malloc(sizeof(tree));b->data=ch;b->lchild=Creatbitree();b->rchild=Creatbitree();}return b;}2.在链接栈中实现二叉树的入栈和出栈,以及获取栈顶元素void push(stack **top,tree **tree){strack *p;p=(stack *)malloc(sizeof(stack));p->t=tree;p->link=*top;*top=p;}void pop(stack **top,tree **T){if(*top=NULL)*T=NULL;else{*T=(*top)->t;6*top=(*top)->link;}}char getTop(stack *s,tree **t){char c=s->t->data;return c;}3.层次遍历打印二叉树void Output(tree *t){stack *top;int deep=0,no=0,maxdeep=0;tree *p=t;top=NULL;while(p!=NULL||top!=NULL){ while(p!=NULL){push(&top,p);top->flag=++deep;if(maxdeep<deep)7maxdeep=deep;p=p->lchild;}if(top!=NULL){deep=top->flag;no++;pop(&top,&p);printf(“%c”,p->data);p=p->rchild;}}}4.递归方法的二叉树遍历操作void PreOrder(tree *b1){if(b1!=NULL){printf(“%c”,b1->data);PreOrder(b1->lchild);PreOrder(b1->rchild);}}8void MidOrder(tree *b2){if(b2!=NULL){MidOrder(b2->lchild);printf(“%c”,b2->data);MidOrder(b2->rchild);}}void LastOrder(tree *b3){if(b3!=NULL){LastOrder(b3->lchild);LastOrder(b3->rchild);printf(“%c”,b3->data);}}这个函数实现了二叉树的递归遍历方法。

数据结构详细教案——树与二叉树

数据结构详细教案——树与二叉树

数据结构详细教案——树与二叉树一、教学目标1.了解树和二叉树的基本概念和特点;2.掌握树和二叉树的基本操作;3.能够通过递归遍历树和二叉树。

二、教学重难点1.树和二叉树的基本概念和特点;2.递归遍历树和二叉树。

三、教学内容1.树的概念和特点1.1树的定义树是n(n>=0)个节点的有限集。

当n=0时,称为空树;如果不为空树,则1. 树有且仅有一个特殊节点被称为根(Root);2.其余节点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每个集合又是一棵树。

1.2节点间的关系- 父节点(parent)是当前节点的直接上级节点;- 子节点(child)是当前节点的直接下级节点;- 兄弟节点(sibling)是具有同一父节点的节点;- 祖先节点(ancestor)是通过从当前节点到根的任意路径可以到达的节点;- 子孙节点(descendant)是通过从该节点到子树的任意节点可以到达的节点。

1.3树的特点-树是一个有层次的结构,可以看作是一个鱼骨图;-树中的每个节点都可以有多个子节点,但只有一个父节点;-树中的节点之间是唯一的,不存在重复节点;-树中的任意两个节点之间都有且仅有一条路径连接。

2.二叉树的概念和特点2.1二叉树的定义二叉树是一种特殊的树结构,它的每个节点最多只能有两个子节点,分别称为左子节点和右子节点。

2.2二叉树的特点-二叉树的度最大为2,即每个节点最多有两个子节点;-二叉树的第i层最多有2^(i-1)个节点;-对于任意一颗二叉树,如果其叶子节点数为n0,度为2的节点数为n2,则有n0=n2+1;-完全二叉树是一种特殊的二叉树,除了最后一层的叶子节点外,每一层的节点都是满的。

四、教学过程1.讲解树和二叉树的基本概念和特点,引导学生理解树和二叉树的定义和节点间的关系。

2.分析树和二叉树的基本操作,并通过实例演示操作过程,让学生掌握操作的步骤和方法。

3.运用递归算法遍历树和二叉树的过程,详细讲解前序遍历、中序遍历和后序遍历的定义和实现方法。

数据结构——线索二叉树实验报告

数据结构——线索二叉树实验报告

线索二叉树应用实验实验报告实验目的(1)掌握线索二叉树的有关知识。

(2)掌握求解线索二叉树中结点前趋和后继的算法以及以相应次序遍历线索二叉树的算法。

(3)掌握二叉树的线索化算法的设计。

实验运行环境Visual C++实验任务线索二叉树是为了快速求解二叉树中结点在指定次序下的前驱和后继,而将二叉链表中空的左右孩子指针分别改为指向其前驱和后继结点而得到的结构,反映了运算对数据结构的设计的影响。

因此,首先要了解线索二叉树的结构特点,其中原本为空的指针被修改为前驱和后继指针,使得对左右子树和线索的判断发生了变化。

利用线索可以实现某些次序下的前驱和后继。

本实验期望能理解线索二叉树的结构特点,实现各前驱和后接算法的求解,并掌握将二叉树转换为线索二叉树的算法,即线索化算法。

为使实验程序简洁直观,下面的部分实验程序中的一些功能实现仍以调用库函数程序"btrechar.h"中的函数的形式给出,并假设该库函数中定义了线索二叉树的相关功能,如显示线索二叉树等。

实验内容第一题:按先序次序遍历先序线索二叉树。

实验测试数据基本要求:第一组数据: full41.cbt第二组数据: letter.cbt实验准备:1:将二叉树的根结点的指针传给函数。

2:判断当前结点是否为先序遍历的最后一个结点,若是则访问完该结点后结束,否则进入3。

2:判断当前结点是否有左子树,若有的话访问完该结点后访问它的左子树,否则访问它的右子树,返回2。

第二题:按中序次序遍历中序线索二叉树。

实验测试数据基本要求:第一组数据: full41.cbt第二组数据: letter.cbt实验准备:1:将二叉树的根结点的指针传给函数。

2:判断当前结点是否为中序遍历的最后一个结点,若是则访问完该结点后结束,否则进入3。

3:对于当前结点,先访问该结点的前驱结点并进入第二步,其次访问该结点并进入第二步最后访问该结点的后继结点并进入2。

第三题:将值为x的结点作为先序线索二叉树T的左子树的(先序)最后一个结点的右孩子插入进去。

二叉排序树课程设计

二叉排序树课程设计

二叉排序树课程设计一、课程目标知识目标:1. 理解二叉排序树的概念和特点;2. 掌握二叉排序树的插入、删除和查找操作;3. 能够分析二叉排序树的时间复杂度;4. 了解二叉排序树在实际应用中的优势。

技能目标:1. 能够手动构建二叉排序树并进行基本操作;2. 能够运用编程语言实现二叉排序树的基本功能;3. 能够分析并解决二叉排序树相关的问题;4. 能够运用二叉排序树解决实际排序和查找问题。

情感态度价值观目标:1. 培养学生对数据结构和算法的兴趣,激发学习热情;2. 培养学生的逻辑思维能力和问题解决能力;3. 培养学生的团队协作意识,学会与他人共同分析、解决问题;4. 培养学生严谨的科学态度,注重算法的正确性和效率。

课程性质:本课程为计算机科学领域的数据结构与算法课程,旨在让学生掌握二叉排序树的基本概念和操作,提高学生的编程能力和逻辑思维能力。

学生特点:学生具备基本的计算机知识和编程基础,对数据结构有一定了解,但对二叉排序树的认识可能较浅。

教学要求:结合学生特点,采用讲解、实践和讨论相结合的教学方法,使学生在理解二叉排序树理论知识的基础上,能够动手实践并解决实际问题。

在教学过程中,注重培养学生的自主学习能力和团队合作精神,提高学生的综合素质。

通过本课程的学习,使学生能够达到上述课程目标,为后续相关课程打下坚实基础。

二、教学内容1. 引入二叉排序树的概念,阐述其定义、性质和应用场景;- 教材章节:第三章第一节“二叉排序树的定义和性质”2. 讲解二叉排序树的插入、删除、查找操作及其实现方法;- 教材章节:第三章第二节“二叉排序树的操作”3. 分析二叉排序树的性能特点,包括时间复杂度和空间复杂度;- 教材章节:第三章第三节“二叉排序树的性能分析”4. 介绍二叉排序树在实际应用中的优势,如排序、查找等;- 教材章节:第三章第四节“二叉排序树的应用”5. 结合实例,让学生动手实践二叉排序树的构建和操作;- 教材章节:第三章实例分析与编程练习6. 总结二叉排序树的特点和适用场景,与其他排序方法进行对比;- 教材章节:第三章总结与拓展教学进度安排:1. 第1课时:引入二叉排序树的概念、性质和应用场景;2. 第2课时:讲解二叉排序树的插入、删除、查找操作;3. 第3课时:分析二叉排序树的性能特点;4. 第4课时:介绍二叉排序树在实际应用中的优势;5. 第5课时:结合实例,学生动手实践二叉排序树的构建和操作;6. 第6课时:总结二叉排序树,与其他排序方法进行对比。

线索二叉树课程设计说明书格式

线索二叉树课程设计说明书格式

中北大学课程设计说明书学院、系:软件学院专业:软件工程班级: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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Status backorderThreading(bithrtree &thrt,bithrtree T)-------------后序线索化
{void backthreading(bithrtree p)} -------------后序线索化子函数
void first(bithrtree thrt) --------------先序遍历
6)编写课程设计报告。
以上要求中第一个阶段的任务完成后,先将设计说明书的草稿交指导老师面审,审查合格后方可进入后续阶段的工作。设计工作结束后,经指导老师验收合格后将设计说明书打印装订,并进行答辩。
指导教师(签字):教研室主任(签字):
批准日期:2012年6月18日
摘 要
本次课程设计以二叉树为基础,重点讨论二叉树的存储表示以及如何建立一任意二叉树,阐述如何对二叉树进行线索化及利用线索进行对二叉树遍历的过程,并按中序遍历和先序遍历的顺序线索化以上二叉树,实现在一已经中序线索化后的二叉树上插入和删除结点,并保证索引不破坏。
图3.1模块流程图
4
线索二叉树的主要函数设置如下:
树的存储的类型为:typedef struct bithrnode
{
char data;
struct bithrnode *lchild,*rchild;
int ltag,rtag;
}bithrnode,*bithrtree;
主程序:
bithrtree T, p,T1;
void mid(bithrtree thrt) ---------------中序遍历
void last(bithrtree t) --------------后序遍历
bithrtree copy(bithrtree &r) ---------复制建立后的二叉树
bithrtree creat(bithrtree &T)
注:指导教师成绩60%,答辩成绩40%,总成绩合成后按五级制记入。
课程设计任务书
2011—2012学年第2学期
专业:计算机应用技术学号:姓名:
课程设计名称:专业基础综合课程设计
设计题目:线索二叉树的实现
完成期限:自2012年6月18日至2012年6月29日共2周
设计内容:
n个结点的二叉链表中含有n+1个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。这种加上了线索的二叉树称为线索二叉树(Threaded BinaryTree)。对一棵非线索二叉树以某种次序遍历使其变为一棵线索二叉树的过程称为二叉树的线索化。由于线索化的实质是将二叉链表中的空指针改为指向结点前驱或后继的线索,而一个结点的前驱或后继结点的信息只有在遍历时才能得到,因此线索化的过程即为在遍历过程中修改空指针的过程。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
struct bithrnode *lchild,*rchild; //左右孩子指针
int ltag,rtag;
}bithrnode,*bithrtree;
bithrtree pre;
bithrtree creat(bithrtree &T)//构造二叉树
{char ch;
fflush(stdin);
PreThreading(p->rchild); //右子树线索化
}
}
Status PreOrderThreading(bithrtree &thrt,bithrtree T)//先序线索二叉树
{if(!(thrt=(bithrtree)malloc(sizeof(bithrnode))))
return error;
p->lchild = pre;
} //前驱线索
if(!pre->rchild)
{pre->rtag = thread;
pre->rchild = p;
} //后继线索
pre = p;
if(p->ltag==link)
PreThreading(p->lchild); //左子树线索化
if(p->rtag ==link)
图4.4后序线索化
Status backorderThreading(bithrtree &thrt,bithrtree T)
5
#include<stdio.h>
#include <string.h>
#include<malloc.h>
#include<stdlib.h>
#define OVERFLOW -2
图4.2先序线索化
PreOrderThreading(bithrtree &thrt,bithrtree T)
(3)中序线索化设计流程如图4.3所示
图4.3中序线索化
Status InOrderThreading(bithrtree &thrt,bithrtree T)
(4)后序线索化设计流程如图4.4所示
运用VC++编写一个程序实现前序线索二叉树、中序线索二叉树和后序线索二叉树,其中遍历要求用先左后右的递归或非递归算法来实现。
要求:
1)阐述设计思想,画出流程图;
2)任意建立一棵二叉树,采用前序、中序、后序三种方法线索化二叉树;
3)说明测试方法,写出完整的运行结果;
4)从时间、空间对算法分析;
5)较好的界面设计;
{void PreThreading(bithrtree p)} ---------先序线索化子函数
Status InOrderThreading(bithrtree &thrt,bithrtree T) ----------中序线索化
{void inthreading(bithrtree &p)} ----------中序线索化子函数
backorderThreading(p,T); -------------后序线索化
last(p); --------------后序遍历
}
}while(k!=0);
子程序:
bithrtree creat(bithrtree &T) --------建立二叉树
Status PreOrderThreading(bithrtree &thrt,bithrtree T) ---------先序线索化
pre->rchild=thrt;pre->rtag=thread; //最后一个结点线索化
thrt->rchild=pre;
}
return OK;
}
void inthreading(bithrtree &p)//中序线索化
{
if (p)
{inthreading(p->lchild); //左子树线索化
专业基础综合课程设计
设计说明书
线索二叉树的实现
学生姓名
xxx
学号
班级
成绩
指导教师
数学与计算机科学学院
2012 年 6月 29日
专业基础综合课程设计评阅书
题目
线索二叉树的实现
学生姓名
学号
指导教师评语及成绩
成绩:教师签名:年月日
答辩教师评语及成绩
成绩:教师签名:年月日
教研室意见
总成绩:室主任签名:年月日
thrt->ltag=link;
thrt->rtag=thread; //建头结点
thrt->rchild=thrt; //右指针回指
if(!T)
thrt->lchild=thrt; //空二叉树
else
{thrt->lchild=T;
pre=thrt;
PreThreading(T); //先序遍历进行先序线索化
if (!p->lchild)
{ p->lchild=pre;
p->ltag=thread;
}
if (!pre->rchild)
{pre->rchild=p;
pre->rtag=thread;
}
pre = p;
inthreading(p->rchild); //右子树线索化
}
}
Status InOrderThreading(bithrtree &thrt,bithrtree T)//中序线索化二叉树
int k;
Do
{
switch(k)
{
case 1:
creat(T); --------建立二叉树
T1=copy(T); ---------复制建立后的二叉树
case 2:
T=copy(T1); ---------复制建立后的二叉树
PreOrderThreading(p,T); ---------先序线索化
{
if(!(thrt=(bithrtree)malloc(sizeof(bithrnode))))
exit(OVERFLOW);
thrt->ltag=link;
thrt->rtag=thread; //建头结点
thrt->rchild=thrt; //右指针回指
scanf("%c",&ch);
if(ch==' '||ch=='#')
T=NULL;
else
{if(!(T=(bithrnode *)malloc(sizeof(bithrnode))))
相关文档
最新文档