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