数据结构课程设计报告之线索二叉树

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线索二叉树

一目的

程序从文件中读取每个结点的信息,然后建立一个二叉树。通过菜单的形式,选择不同的线索化方式,然后再对线索化的二叉树经行遍历并输出对应的结果。

二需求分析

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是后续遍历下,当前遍历的结点的指针。front是后续遍历下,current结点的前驱的指针。

操作结果:对已建立的二叉树完成后续线索化。

4、输出结果的抽象数据类型

void InOrder()

操作结果:输出中序线索二叉树的中序遍历的结果。

Node* InFirst(Node *current)

current是中序线索二叉树中指向一个结点的指针。

操作结果:返回以current为根的树的中序遍历下的第一个结点的指针。

Node* InNext(Node *current)

current是中序线索二叉树中指向一个结点的指针。

操作结果:返回中序遍历下,current结点的后继结点的指针。

void PostOrder()

操作结果:输出后续线索二叉树的后续遍历结果。

Node* PostFirst(Node *current)

current是后续线索二叉树中指向一个结点的指针。

操作结果:返回以current为根的树的后续遍历下的第一个结点的指针。

Node* PostNext(Node *current)

current是后续线索二叉树中指向一个结点的指针。

操作结果:返回后续遍历下,current结点的后继结点的指针。

四详细设计

二叉树中,每个结点的定义

struct Node

{

char ch; //每个结点的信息域

int ltag; //左孩子指针标志域

int rtag; //右孩子指针标志域

Node *left; //左孩子

Node *right; //右孩子

Node *parent; //双亲结点

};

线索二叉树的抽象数据类型

class ThreadTree //线索二叉树的抽象数据类型

{

public:

ThreadTree(); //构造函数

bool CreatBinTree(); //从文件中读取数据并建立二叉树void CreatInThread(); //对二叉树进行中序线索化

void CreatInThread(Node *current,Node *&front);

Node* InFirst(Node *current); //寻找中序下的第一个结点

Node* InNext(Node *current); //寻找中序下当前结点的后继结点void InOrder(); //对中序线索二叉树进行遍历

void CreatPostThread(); //对二叉树进行后序线索化

void CreatPostThread(Node *current,Node *&front);

Node* PostFirst(Node *current); //需找后序下的第一个结点

Node* PostNext(Node *current); //寻找后序下当前结点的后继结点void PostOrder(); //对后序线索二叉树进行遍历

void DeleteInTree(); //析构中序线索二叉树

void DeletePostTree(); //析构后续线索二叉树

private:

Node *root; };

整个流程图如下:

相关文档
最新文档