线索二叉树算法的实现.docx

上传人:b****9 文档编号:25517636 上传时间:2023-06-09 格式:DOCX 页数:15 大小:17.58KB
下载 相关 举报
线索二叉树算法的实现.docx_第1页
第1页 / 共15页
线索二叉树算法的实现.docx_第2页
第2页 / 共15页
线索二叉树算法的实现.docx_第3页
第3页 / 共15页
线索二叉树算法的实现.docx_第4页
第4页 / 共15页
线索二叉树算法的实现.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

线索二叉树算法的实现.docx

《线索二叉树算法的实现.docx》由会员分享,可在线阅读,更多相关《线索二叉树算法的实现.docx(15页珍藏版)》请在冰豆网上搜索。

线索二叉树算法的实现.docx

线索二叉树算法的实现

数据结构课程设计

设计说明书

线索二叉树算法的实现

 

学号

班级

成绩

 

指导教师

 

 

计算机科学与技术系

2011年3月4日

数据结构课程设计评阅书

题目

线索二叉树算法的实现

学生姓名

学号

指导教师评语及成绩

成绩:

教师签名:

年月日

答辩教师评语及成绩

成绩:

教师签名:

年月日

教研室意见

总成绩:

室主任签名:

年月日

 

 

 

 

 

摘 要

设计了一个线索二叉树的软件,该软件具有创建二叉树、线索二叉树、先序线索二叉树、中序线索二叉树、后序线索二叉树的功能。

本软件采用VC++作为软件开发环境,采用C语言各种语句和结构实现二叉树的一系列操作,并采用友好界面向用户提示所操作过程和所输入数据方式,操作简单,界面清晰,易于为用户所接受。

关键字:

线索;二叉树;先序;中序;后序

目 录

1课题描述  1

2问题分析和任务定义  2

3逻辑设计  3

4详细设计  7

5程序编码  9

6程序调试与测试  19

7结果分析  20

8总结  21

参考文献  22

 

1课题描述

本系统重在设计二叉树的各种线索化实现,通过C语言作为编程语言,实现对二叉树的线索化,其中包括先序线索化、中序线索化以及后序线索化。

旨在使用户在使用过程中能学会直接调用各种所需函数,以及掌握对二叉树的各种线索化过程。

其中各函数分别为:

BiThrTreeCreateBiTree(BiThrTree&T);//构造二叉树

voidPreOrderTraverse(BiThrTreeT);//先序遍历二叉树(递归算法)

voidInOrderTraverse(BiThrTreeT);//中序遍历二叉树(递归算法)

voidPosOrderTraverse(BiThrTreeT);//后序遍历二叉树(递归算法)

voidPreOrder_Stack_Traverse(BiThrTreeT);//先序遍历二叉树(非递归算法)

voidInOrder_Stack_Traverse(BiThrTreeT);//中序遍历二叉树(非递归算法)

StatusPreOrderThreading(BiThrTree&Thrt,BiThrTreeT);//先序线索化二叉树

voidPreThreading(BiThrTreep);

StatusInOrderThreading(BiThrTree&Thrt,BiThrTreeT);//中序线索化二叉树

voidInThreading(BiThrTreep);

voidPreOrderTraverse_Thr(BiThrTreeThrt);//先序遍历线索化二叉树

voidInOrderTraverse_Thr(BiThrTreeThrt); //中序遍历线索化二叉树

voidInOrder_Thr_T(BiThrTreeThrt,BiThrTree&T);//将线索化二叉树还原

开发工具:

c语言

运行环境:

Visualc++6.0。

2问题分析和任务定义

本软件要求制作一个能对二叉树线索化的软件,其中包括对二叉树的先序、中序、后序线索化,最后遍历线索化并输出。

其中线索化要实现对同一个树的线索化,即应具备还原线索化树的程序,并重新线索化。

 

3逻辑设计

本程序由主函数首先调用BiThrTreeCreateBiTree(BiThrTree&T);构造二叉树,随后依次调用函数

(1)BiThrTreeCreateBiTree(BiThrTree&T);//构造二叉树

voidPreOrderTraverse(BiThrTreeT);//先序遍历二叉树(递归算法)

voidInOrderTraverse(BiThrTreeT);//中序遍历二叉树(递归算法)

voidPosOrderTraverse(BiThrTreeT);//后序遍历二叉树(递归算法)

voidPreOrder_Stack_Traverse(BiThrTreeT);//先序遍历二叉树(非递归算法)

voidInOrder_Stack_Traverse(BiThrTreeT);//中序遍历二叉树(非递归算法)

StatusPreOrderThreading(BiThrTree&Thrt,BiThrTreeT);//先序线索化二叉树

voidPreThreading(BiThrTreep);

StatusInOrderThreading(BiThrTree&Thrt,BiThrTreeT);//中序线索化二叉树

voidInThreading(BiThrTreep);

voidPreOrderTraverse_Thr(BiThrTreeThrt);//先序遍历线索化二叉树

voidInOrderTraverse_Thr(BiThrTreeThrt); //中序遍历线索化二叉树

voidInOrder_Thr_T(BiThrTreeThrt,BiThrTree&T);//将线索化二叉树还原;

依次完成先中后遍历和先序和中序线索化

 

 

 

4详细设计

首先定义二叉树的存储结构如下:

typedefenumPointerTag{Link,Thread};//Link==0:

指针,Thread==1:

线索

typedefstructBiThrNode

{   //线索二叉树中结点的定义

chardata;

intLTag,RTag;

structBiThrNode*lchild,*rchild;

}BiThrNode,*BiThrTree;

然后定义栈的存储结构:

typedefstruct

{

BiThrTree*base;

BiThrTree*top;

intstacksize;

}SqStack;

其中二叉树的遍历可用递归和非递归两种算法实现,递归可根据如下算法实现:

voidPreOrderTraverse(BiThrTreeT)//先序遍历

{

if(T){

cout<<"  "<data;/*访问根结点*/

PreOrderTraverse(T->lchild);

PreOrderTraverse(T->rchild);

}

}

中序和后序只需改变访问次序即可;在进行进行非递归遍历时可根据栈的访问顺序依次遍历。

最后线索化该二叉树也可根据递归的算法实现,其中先序线索递归实现可根据

voidPreThreading(BiThrTreep){  

if(p){if(!

p->lchild)//先驱线索

{p->lchild=pre;

p->LTag=Thread;} 

if(!

pre->rchild){//后继线索  

pre->rchild=p;  

pre->RTag=Thread;}  

pre=p;

if(p->LTag==Link)PreThreading(p->lchild);//左子树线索化

if(p->RTag==Link)

PreThreading(p->rchild);} //右子树线索化

}

后续也只需改变线索化顺序即可。

但在中序线索化后程序会自动还原线索化再进行先序线索化。

 

5程序编码

#include

#include

#include

#include

#include

#defineOK1

#defineFALSE0

#defineSTACK_INIT_SIZE100

#defineSTACKINCREMENT10

#defineOVERFLOW-1

typedefintStatus;

typedefenumPointerTag{Link,Thread};//Link==0:

指针,Thread==1:

线索

typedefstructBiThrNode

{   //线索二叉树中结点的定义

chardata;

intLTag,RTag;

structBiThrNode*lchild,*rchild;

}BiThrNode,*BiThrTree;

//函数声明

BiThrTreeCreateBiTree(BiThrTree&T);//构造二叉树

voidPreOrderTraverse(BiThrTreeT);//先序遍历二叉树(递归算法)

voidInOrderTraverse(BiThrTreeT);//中序遍历二叉树(递归算法)

voidPosOrderTraverse(BiThrTreeT);//后序遍历二叉树(递归算法)

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1