树型数据结构及其应用

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

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

课程名:《数据结构》

题目:实验2 树型数据结构及其应用

班级:

姓名:

实验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 4.按凹入表形式打印树形结构,如图6.35所示。

[提示]:参P.129例,用先根遍历。

A

B C D

E F G 图6.35

实现代码和运行结果

1、

#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 Preorder(BiTree bt)

{

if(bt!=NULL)

{

printf("%c ",bt->data);//访问根节点

Preorder(bt->LChild);//先序遍历左子树

Preorder(bt->RChild);//先序遍历右子树}

}

void Inorder(BiTree bt)

{

if(bt!=NULL)

{

Inorder(bt->LChild);//先序遍历左子树

printf("%c ",bt->data);//访问根节点

Inorder(bt->RChild);//先序遍历右子树}

}

void Postorder(BiTree bt)

{

if(bt!=NULL)

{

Postorder(bt->LChild);//先序遍历左子树

Postorder(bt->RChild);//先序遍历右子树

printf("%c ",bt->data);//访问根节点

}

}

int main()

{

BiTree bt;

CreateBiTree(&bt);

printf("\nPreorder:");

Preorder(bt);

printf("\nInorder:");

Inorder(bt);

printf("\nPostorder:");

Postorder(bt);

return 0;

}

}

2、

#include

#include

#include

#define TRUE 1

#define FALSE 0

#define ERROR 0

#define OK 1

#define MAXSIZE 50 /*队列的最大长度*/ typedef char DataType;

typedef struct Node

{

DataType data;

struct Node *LChild;

struct Node *RChild;

}BiTNode, *BiTree;

typedef BiTree QueueElementType;

typedef struct

{

QueueElementType element[MAXSIZE]; /* 队列的元素空间*/ int front; /*头指针指示器*/

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

}SeqQueue;

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 InitQueue(SeqQueue *Q)

{

/* 将*Q初始化为一个空的循环队列*/

Q->front=Q->rear=0;

}

/*入队操作*/

int EnterQueue(SeqQueue *Q, QueueElementType x)

{

相关文档
最新文档