(中央电大)数据结构实验报告3

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

}

相关文档
最新文档