数据结构二叉树报告

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

数据结构二叉树报告

题目:编制一个可执行二叉树操作的程序

一、需求分析

1.本演示程序演示了输入缓冲区的执行过程,需要输入的包括字符和选择字符,字符则可以随意输入,特别强调字符“*”为特殊的定义字符,程序最低层节点值为“*”,字符的输入以一个“回车符”为结束标志的字符串。

2.演示程序的输出以用户和计算机对话的方式进行,即在计算机终端上显示“提示信息”后,由客户通过键盘输入数据并执行相应的命令;客户的输入数据和计算机的运算结果显示在其后。

3.程序采用二叉树进行数据的存储和操作,二叉树的遍历采用先序遍历法,输入需要建立的二叉树的节点值,程序会自动计算出其所需,本程序同时支持循环使用,程序运行后的结果作为依据。

4.测试数据:

输入数据:abc**d**e*f**

预计结果:

先序递归遍历:abcdef

中序非递归遍历:cbdaef

后序递归遍历:cdbfea

按层次遍历:abecdf

度为一结点个数:1

树的深度:3

5.程序的执行命令:

(1)创建二叉树

(2)递归算法先序遍历二叉树

(3)非递归算法中序遍历二叉树

(4)递归算法后序遍历二叉树

(5)求二叉树叶子结点个数

(6)按层次遍历二叉树

(7)求二叉树树深

二、概要设计

1.设定二叉树的抽象数据类型定义为:

ADT btree {

数据对象:D={a(i)|a(i)∈IntSet,i=1,2,3…,n,n≥0}

数据关系:R(1)={ ﹤a(i-1),a(i)﹥| a(i-1),a(i)∈D,i=1,2,…..,n}

基本操作:

btree creat(&T)

操作结果:创建一个二叉树

perorder(T)

初始条件:二叉树存在

操作结果:递归先序遍历二叉树

incorder(T)

初始条件:二叉树存在

操作结果:非递归中序遍历二叉树,同时计算出度为1节点个数 postorder(T)

初始条件:二叉树存在

操作结果:递归后序遍历二叉树

traverse(T)

初始条件:二叉树存在

操作结果:按层次遍历二叉树

depth(T)

初始条件:二叉树存在

操作结果:求二叉树树深

} ADT btree

2. 队列的数据抽象类型:

初始化一个带头结点的队列

initqueue(q)

操作结果:初始化一个带头结点的队列

enqueue(&q, T)

初始条件:队列存在

操作结果:入队列

dequeue(&q, &T)

初始条件:队列存在

操作结果:出队列

queueempty(q)

初始条件:队列存在

操作结果:判断队列是否为空

3.本程序包含三个个模块:

(1)主程序模块:

void main()

{

调用命令;

执行运算;

输出结果;

循环使用;

}

(2)二叉树模块:实现二叉树数据抽象类型

(3)队列模块:执行层次遍历操作等

各个模块的调用关系图:

三、详细设计

1.二叉树结构类型

typedef struct btnode

{

char data;

struct btnode *lchild;

struct btnode *rchild;

}btree

2.二叉树的基本操作设置:

btree creat(&T)

// 初始化,创建二叉树T perorder()

//递归先序遍历二叉树T inorder(T)

// 非递归中序遍历二叉树T

//计算叶子结点个数并返回其值postorder(T)

// 递归后序遍历二叉树T traverse(T)

// 对二叉树T进行层次遍历

int depth(btree *t)

//求二叉树的树深

3.队列的基本操作设置:

initqueue(q)

// 初始化一个带头结点的队列

enqueue(&q, T)

// 入队列

dequeue(&q, &T)

// 出队列

queueempty(q) 主程序模块二叉树模块队列模块

// 判断队列是否为空

其中部分操作的算法:

void creat(bitree &T)

// 创建二叉树

{

if(ch=='*')

T=NULL;

else

{

T=(bitree)malloc(sizeof(bitnode));

if(T==NULL)

exit(OVERFLOW);

T->data=ch;

creat(T->lch);

creat(T->rch);

}

void perorder (bitree T)

//先序遍历

{

if (T)

{

printf("%c ",T->data);

perorder(T->lch);

perorder(T->rch);

}

}

void incorder(bitree T)

//中序非递归遍历

{

bool boolean;

boolean=1;

do

{

while(p)

{

if((p->rch==NULL&&p->lch!=NULL)||(p->rch!=NULL&&p->lch==NULL))

m++;

s[top]=p;

top++;

p=p->lch;

相关文档
最新文档