树形数据结构及其应用

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

淮海工学院计算机工程学院实验报告书

课程名:《数据结构》

题目:树形数据结构及其应用

班级:

学号:

姓名:

实验2树形数据结构

实验目的和要求

1.熟练掌握二叉树的二叉链表存储结构;二叉树的常用遍历方法:按层遍历、先序递归遍历、中序递归和非递归遍历、后序递归遍历。

2.掌握按先序遍历顺序输入数据,递归建立二叉树的方法。

3. 掌握建立哈夫曼树的方法,实现哈夫曼编码。

实验环境

Turbo C 或VC++

实验学时

4学时,必做实验

实验题目

1.[问题描述] 建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中

序和后序),打印输出遍历结果。

[基本要求] 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行遍历(先序、中序、后序),然后将遍历结果打印输出。要求采用递归和非递归两种方法实现。

[测试数据] ABCффDEфGффFффф(其中ф表示空格字符)

输出结果为:先序:ABCDEGF

中序:CBEGDFA

后序:CGBFDBA

2.已知二叉树按照二叉链表方式存储,编写算法,要求实现二叉树的竖向显示(竖向显示就是二叉树的按层显示)。

[提示]:

(1)参习题6.20,实现逐层遍历

(2)队中保存每个结点的打印位置,其左、右子的距离

3.如题1要求建立好二叉树,按凹入表形式打印二叉树结构,如图6.34所示。

A

B C

D E

图6.34

F

主要数据结构

1.

typedef char DataType;

typedef struct Node

{

DataType data;

struct Node *LChild;

struct Node *RChild;

}BiTNode, *BiTree;

2.

ypedef BiTree QueueElementType;

typedef struct

{

QueueElementType element[MAXSIZE]; /* 队列的元素空间*/

int front; /*头指针指示器*/

int rear; /*尾指针指示器*/

}SeqQueue;

3.void InitQueue(SeqQueue *Q)/*初始化操作*/

4.int EnterQueue(SeqQueue *Q, QueueElementType x)/*入队操作*/

5.int DeleteQueue(SeqQueue *Q, QueueElementType *x)/*出队操作*/

6.int LayerOrder(BiTree bt)

7.InitQueue(Q); /*初始化空队列Q*/

8.void CreateBiTree(BiTree *bt)

9.void PreOrder(BiTree root)//先序遍历二叉树

10.void InOrder(BiTree root)//中序遍历二叉树

11.void PostOrder(BiTree root)//后序遍历二叉树

12.int CreateBiTree(BiTree &T) //创建一棵非空二叉树

13.void PrintTree(BiTree Boot,int nLayer) /* 打印二叉树*/

主要算法

1.用递归和非递归进行遍历(先序、中序、后序)

2.按图进行遍历

3.用队列编写二叉链表存储:初始化、入队、出队

运行结果

1.递归

非递归

2.

3.

实验体会

1.代码可能有点冗长,对后序线索二叉树求后继节点实现的不是很好。

2.这次任务量有点大,实现的函数太多,全部放在一个文件里不利于维护与修改。

附源代码

1.递归:

#include

#include

#include

typedef char DataType;

typedef struct Node

{

DataType data;

struct Node *LChild;

struct Node *RChild;

}BiTNode, *BiTree;

void CreateBiTree(BiTree *bt)

{

char ch;

ch=getchar();

if(ch==' ') *bt=NULL;

else

{

*bt=(BiTree)malloc(sizeof(BiTNode));

(*bt)->data=ch;

CreateBiTree(&(*bt)->LChild);

CreateBiTree(&(*bt)->RChild);

}

}

void Visit(char ch)

{

printf("%c ",ch);

}

void PreOrder(BiTree root)//先序遍历二叉树{

if(root!=NULL)

{

Visit(root->data);

PreOrder(root->LChild);

PreOrder(root->RChild);

}

}

void InOrder(BiTree root)//中序遍历二叉树{

if(root!=NULL)

{

InOrder(root->LChild);

Visit(root->data);

InOrder(root->RChild);

}

}

void PostOrder(BiTree root)//后序遍历二叉树{

if(root!=NULL)

{

PostOrder(root->LChild);

PostOrder(root->RChild);

Visit(root->data);

}

}

void main()

{

BiTree T;

CreateBiTree(&T);

printf("先序遍历序列为:");

PreOrder(T);

printf("\n中序遍历序列为:");

InOrder(T);

printf("\n后序遍历序列为:");

PostOrder(T);

相关文档
最新文档