树型数据结构及其应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)
{