(中央电大)数据结构实验报告3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中央广播电视大学实验报告(学科:数据结构)
姓名班级学号实验日期
成绩评定教师签名批改日期
实验名称:实验三二叉树
3.1 二叉树的顺序存储结构和链式存储结构
【问题描述】
设一棵完全二叉树用顺序存储方法存储于数组tree中,编写程序:
(1)根据数组tree,建立与该二叉树对应的链式存储结构。
(2)对该二叉树采用中序遍历法显示遍历结果。
【基本要求】
(1)在主函数中,通过键盘输入建立设定的完全二叉树的顺序存储结构。
(2)设计子函数,其功能为将顺序结构的二叉树转化为链式结构。
(3)设计子函数,其功能为对给定二叉树进行中序遍历,显示遍历结果。
(4)通过实例判断算法和相应程序的正确性。
【实验步骤】
(1)运行PC中的Microsoft Visual C++ 6.0程序,
(2)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“X1.cpp”→在“位置”中选择储存路径为“桌面”→“确定”,(3)输入程序代码,
程序代码如下:
#include
#include
#include
#include
#include
#define MaxSize 10
typedef struct node
{
char data;
struct node *left,*right;
}NODE;
void Creab(char *tree,int n,int i,NODE *p);
void Inorder(NODE *p);
void main()
{
NODE *p;
char tree[MaxSize];
int n=1;
int i=1;
printf("请输入完全二叉数的节点值(连续输入字符,以回车结束输入。):");
while((tree[n] = getchar( )) != '\n') n++;
tree[n] ='\n';
p=NULL;
Creab(tree,n,i,p);
Inorder(p);
}
void Creab(char *tree,int n,int i,NODE *p)
{
if(i>=n) p=NULL;
else
{
p=(NODE *)malloc(sizeof(NODE));
p->data=tree[i];
printf("%c ",p->data );
Creab(tree,n,2*i,p->left);
Creab(tree,n,2*i+1,p->right);
}
}
/*中序遍历树*/
void Inorder(NODE *p)
{
if(p!=NULL) {
Inorder(p->left);
printf("%c ",p->data);
Inorder(p->right);
}
}
程序运行结果如下:
3.1 二叉树的遍历
【问题描述】
设一棵二叉树采用链式方式存储,编写一个前序遍历该二叉树的非递归算法。【基本要求】
(1)掌握前序遍历二叉树的步骤,针对任意一棵二叉树能人工完成对二叉树的前序遍历。(2)能掌握栈的工作特点,并能正确应用这一特点实现对二叉树的遍历。
【实验步骤】
(1)运行PC中的Microsoft Visual C++ 6.0程序,
点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中(2)输入“X1.cpp”→在“位置”中选择储存路径为“桌面”→“确定”,
(3) 输入程序代码
程序代码如下:
void FirstOrderAccess1(BTree * header)
{
BTree * stack[MAX_NODE];
BTree *p;
int top;
top = 0;
p = header;
do
{
while(p!=NULL)
{
printf("BTree[%d] = %c“t",p->order,p->data);
if(p->rchild!=NULL)
stack[++top] = p->rchild;
p = p->lchild;
}
if(top!=0)
p = stack[top--];
}while((top>0)||(p!=NULL));
}