二叉树的建立与遍历(实验报告)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
BiTNode *root;
char ch;
ch=s[*pi];
(*pi)++;
if(ch=='*') return NULL;
root=(BiTNode*)malloc(sizeof(BiTNode));
root->data=ch;
root->LChild=BiT_Create(s,pi);
root->RChild=BiT_Create(s,pi);
本科学生综合性实验报告
学院:软件与通信工程学院
课程名称:数据结构与算法
专业班级:09通信工程1班
姓Βιβλιοθήκη Baidu:王燕
学 号:0093731
学生实验报告(2)
学生姓名
王燕
学号
0093731
同组人
实验项目
□必修 □选修
□演示性实验□验证性实验 □操作性实验□综合性实验
实验地点
H113
实验仪器台号
指导教师
蒋娜
实验日期及节次
{
if(root!=NULL)
{
InOrder(root->LChild);
printf("%c",root->data);
InOrder(root->RChild);
}
}
//后序递归遍历
void PostOrder(BiTree root)
{
if(root!=NULL)
{
PostOrder(root->LChild);
flag[top]=0;
top++;
p=p->LChild;
}
while(top>0 && flag[top-1]==1)
{
top--;
p=node[top];
printf("%c",p->data);
}
if(top>0)
{
p=node[top-1];
flag[top-1]=1;
p=p->RChild;
周五8、9、A节
一、实验目的
1.进一步掌握树的结构及非线性特点,递归特点。
2.进一步巩固对指针的使用,编写二叉树的创建和遍历基本操作的实现程序。
二、实验内容
建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。
[实验说明]
从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。
printf("\t\t\t1.先序建立二叉链表\n");
printf("\t\t\t2.先序遍历二叉树\n");
{
if(p->data!='*')
printf("%c",p->data);
node[top]=p;
top++;
p=p->LChild;
}
if(top>0)
{
top--;
p=node[top];
p=p->RChild;
}
}while(top>0 || p!=NULL);
}
//中序非递归遍历二叉树
void BiT_InOrder(BiTNode *root)
3.撰写实验报告,提供实验结果和数据。
4.分析算法,要求给出具体的算法分析结果,包括时间复杂度和空间复杂度,并简要给出算法设计小结和心得。
5.采用上机情况、程序质量、实习报告相结合的形式,满分为100分。
四、实验仪器
1.WindowsXP以上操作系统;
2.Visual C++6.0语言环境;
3.每人一台PC机。
return(root);
}
//前序递归遍历
void PreOrder(BiTree root)
{
if(root!=NULL)
{
printf("%c",root->data);
PreOrder(root->LChild);
PreOrder(root->RChild);
}
}
//中序递归遍历
void InOrder(BiTree root)
五、实验内容和步骤
1.启动Windows XP操作系统
打开计算机,启动Windows XP操作系统。
2.创建工作文件夹
创建VisualC++6.0的工作文件夹。
3.启动Visual C++6.0
建立一个空工程BiTree,在建立一个源文件bitree
4.编写代码如下:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX 50
typedef struct Node
{
char data;
struct Node * LChild;
struct Node * RChild;
}BiTNode, * BiTree;
//建立二叉链表
BiTNode *BiT_Create(char s[ ],int *pi)
PostOrder(root->RChild);
printf("%c",root->data);
}
}
//前序非递归遍历二叉树
void BiT_PreOrder(BiTNode *root)
{
BiTNode *p,*node[MAX];
int top=0;
p=root;
do{
while(p!=NULL)
}
}while(top>0 || p!=NULL);
}
//后序非递归遍历二叉树
void BiT_PostOrder(BiTNode *root)
{
BiTNode *p,*node[MAX];
int top,flag[MAX];
top=0;
p=root;
do{
while(p!=NULL)
{
node[top]=p;
}
}while(top>0 );
}
void Display(char str[])
{
printf("当前链表信息为:\n%s\n",str);
}
void main( )
{
char str[30];
BiTNode *root;
int k=1,flag;
while(k)
{
int i=0;
printf("\n\n\t\t\t二叉树的建立与遍历\n\n");
{
BiTNode *p,*node[MAX];
int top=0;
p=root;
do{
while(p!=NULL)
{
node[top]=p;
top++;
p=p->LChild;
}
if(top>0)
{
top--;
p=node[top];
printf("%c",p->data);
p=p->RChild;
[测试数据]
ABC**DE*G**F***(其中*表示空格字符)
则输出结果为 先序:ABCDEGF
中序:CBEGDFA
后序:CGBFDBA
[拓展要求]
采用非递归算法实现二叉树遍历。
三、实验要求
1.用C++/C完成算法设计和程序设计并上机调试通过。
2. 实验过程中学生调试完成,需向教师演示实验过程和结果。
相关文档
最新文档