- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验报告
课程名称:数据结构与算法
课程类型:必修
实验项目名称:
实验题目:树形结构及应用
设计成绩
报告成绩
指导老师
实验目的
树型结构的建立与遍历 树型结构的遍历是树型结构算法的基础,本实验要求编写程序演示二叉树的存储结构的建立和遍历过程。
实验要求及实验环境
实验要求:
(1)编写建立二叉树的二叉链表存储结构的程序,并横版和竖版两种方式显示该二叉树;
(2) 在(1)所建二叉树的基础上,编写程序完成先序、中序和后序遍历的递归和非递归实现并显示相应的遍历序列;
(3) 在二叉树的二叉链表存储结构基础上,编写程序实现二叉树的先序或中序或后序线索链表存储结构建立的算法,并(用广义表的形式)显示和保存二叉树的相应的线索链表;
中序线索链表广义表显示示例:1(2(4(0,2), 1), 3(6(1,3),7(3,0)))
(4) 在二叉树的线索链表存储结构上,编写程序分别实现求一个结点的先序(中序、后序)的后继结点的算法;(先序、中序、后序可以任选一种实现)
(5) 在 (4) 基础上,编写程序实现对线索二叉树进行先序(中序、后序)遍历的非递归算法,并显示线索二叉树和相应的遍历序列。
实验环境:运行C或c++的微机。
三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)
创建二叉树(先序方式输入)1.逻辑设计
创建二叉树(先序方式输入)
横版显示
横版显示
先序,中序,后序三种方式遍历
先序,中序,后序三种方式遍历
建立线索二叉树
建立线索二叉树
输入结点,查询结点后继结点输出广义表
输入结点,查询结点后继结点
输出广义表
2.物理设计
1.二叉树数据类型:
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
2.线索二叉树数据类型:
typedef struct BiThreTree{
DataType data; //定义结点元素
PointerTag LTag,RTag;
struct BiThreTree *lchild,*rchild;
}BiThreTree;
3.中序,前序,后序遍历函数大致相同
以中序为例,递归
void inorder(BiTree T)
{ //中序遍历二叉树并输出
if(T != NULL)
{
inorder(T-lchild);
printf(%c,T-data);
inorder(T-rchild);
}
}
测试结果
线索二叉树建立,中序遍历,搜索结点,输出后继结点
2.二叉树的建立,输入,显示,遍历,广义表
五、系统不足与经验体会
1. 经验体会:
熟悉了二叉树这种数据结构,并了解其应用,例如求前驱后继结点。
了解了三种不同的遍历方式,递归方式更好写!
2. 系统不足:
横版显示有一点不齐。
六、附录:源代码(带注释)
#include stdio.h
#include stdlib.h
#include malloc.h
#define MAX(x,y) (x)(y)?(x):(y)
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree CreateBiTree(BiTree T)
{ // 按先序次序输入二叉树中结点的值(int类型)
//构造二叉链表表示的二叉树T,结点值为int型,表示空(子)树
char data;
scanf( %c,data);
if(0 == data) // 空
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)
exit(0);
T-data = data; // 生成根结点
printf(请输入结点%c的左子结点: ,T-data);
T-lchild = CreateBiTree(T-lchild); // 构造左子树
printf(请输入结点%c的右子结点: ,T-data);
T-rchild = CreateBiTree(T-rchild); // 构造右子树
}
return T;
}
void printform(int k)
{
int i;
for(i=k;i=0;i--)
printf( );
}
void PrintBiTree(BiTree T,int k)
原创力文档


文档评论(0)