二叉树及其操作的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级:数媒1101 学号:0305110125 课程名称:数据结构实验
实验名称:二叉树及其操作的实现
实验内容和目的:
内容:1. 创建二叉树;
2. 用递归方法实现二叉树的各种遍历。
目的:1.掌握二叉树的定义和存储表示,学会建立一棵特定二叉树的方法;
2.掌握二叉树的遍历算法(先序、中序、后序遍历算法)的思想,并学会遍
历算法的递归实现和非递归实现。
实验步骤:
1.首先定义二叉树的存储形式;
2.用CreateBiTree( )构造二叉链表表示的二叉树T;
3. 用PreOrder ( bitree *t )、InOrder ( bitree *t)、PostOrder ( bitree * t )这三个函数
对二叉树依次进行先序、中序、后序遍历,并输出遍历序列。
实验代码/文件描述:
#include "stdio.h"
#include "stdlib.h"
#define maxsize 64
#define null 0
typedef char datatype;
typedef struct node
{
datatype data;
struct node * lchild, * rchild;
} bitree;
bitree * bitr;
bitree *Q[maxsize];
bitree *CREATREE( )
{ char ch ; int front , rear ;
bitree *root , *s ;
root = null ; front = 1 ; rear = 0 ;
ch = getchar( ) ;
while ( ch != '#' )
{ s = null ;
if ( ch != '@' )
{ s =(bitree*) malloc(sizeof(bitree));
s->data = ch ; s->lchild = null ;s->rchild =null; }
rear ++; Q[rear] = s ;
if (rear == 1 ) root = s ;
else
{ if ( s && Q[front] )
if (rear%2==0 ) Q[front]->lchild = s ;
else Q[front]->rchild = s ;
if ( rear%2==1 ) front ++;
}
ch = getchar ( ) ;
}
return root ;
}
void PreOrder ( bitree *t )
{
if ( t != null )
{
printf("\t%c\n",t->data);
PreOrder ( t->lchild );
PreOrder ( t->rchild );
}
}
void InOrder ( bitree *t)
{
if ( t != NULL )
{
InOrder ( t->lchild );
printf("\t%c\n", t->data);
InOrder ( t->rchild );
}
}
void PostOrder ( bitree * t )
{
if ( t != NULL )
{
PostOrder ( t->lchild );
PostOrder ( t->rchild );
printf("\t%c\n",t->data);
}
}
void main()
{ bitree *p ;
p=(bitree*)malloc(sizeof(bitree)); printf("输入二叉树:\n");
p= CREATREE( );
printf("先序遍历:\n");
PreOrder (p);
printf("中序遍历:\n");
InOrder ( p);
printf("后序遍历:\n");
PostOrder (p);
free(p);
getch();
}
实验结果和分析:
结果:
分析:
1.通过键盘输入二叉树的结点,建立一个二叉树,利用递归的方法依次实现对
该二叉树的先序、中序、后序遍历,并输出遍历结果。