二叉树的建立及遍历
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验五
课程数据结构实验名称二叉树的建立及遍历第页
专业班级学号
实验日期:年月日评分
一、实验目的
1.学会实现二叉树结点结构和对二叉树的基本操作。
2.掌握对二叉树每种操作的具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。
二、实验要求
1.认真阅读和掌握和本实验相关的教材容。
2.编写完整程序完成下面的实验容并上机运行。
3.整理并上交实验报告。
三、实验容
1.编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)对这棵二叉树进行遍历并计算出二叉树的高度。
2 .编写程序生成下面所示的二叉树,并采用先序遍历的非递归算法对此二
叉树进行遍历。
四、实验步骤
(描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果)
第一题
#include "stdafx.h"
#include"iostream.h"
#include"stdlib.h"
#include"stdio.h"
#include
using namespace std;
#define NULL 0
#define OK 1
#define OVERFLOW -1
typedef int Status;
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}*bitree;
int k=0;
int depth(bitree T)//树的高度
{
if(!T)return 0;
else
{
int m=depth(T->lchild);
int n=depth(T->rchild);
return (m>n?m:n)+1;
}
}
//先序,中序建树
struct node *create(char *pre,char *ord,int n)
{
struct node * T;
int m;
T=NULL;
if(n<=0)
{
return NULL;
}
else
{
m=0;
T=new(struct node);
T->data=*pre;
T->lchild=T->rchild=NULL;
while(ord[m]!=*pre)
m++;
T->lchild=create(pre+1,ord,m);
T->rchild=create (pre+m+1,ord+m+1,n-m-1);
return T;
}
}
//中序递归遍历
void inorder(struct node *T) {
if(!T)
return;
else
{
inorder(T->lchild );
cout<
inorder(T->rchild );
}
}
void inpre(struct node *T)
{
if(!T)
return;
else
{
cout<
inpre(T->lchild );
inpre(T->rchild );
}
}
void postorder(struct node *T) {
if(!T)
return;
else
{
postorder (T->lchild );
postorder (T->rchild );
cout<
}
}
//先序非递归遍历
void inpre1(struct node *T) {
struct node *p;
struct node *stack[20];
int top=0;
p=T;
cout<<"非递归先序";
while(p||top!=0)
{
while (p)
{
stack[top++]=p;
cout<
p=p->lchild;
}
p=stack[--top];
p=p->rchild ;
}
}
//中序非递归遍历
void inorder1(struct node *T) {
struct node *p;
struct node *stack[20];
int top=0;
p=T;
cout<<"非递归中序";
while(p||top!=0)
{
while (p)
{
stack[top++]=p;
p=p->lchild ;
}
p=stack[--top];
cout<
p=p->rchild ;
}
}
//主函数
int main()
{
bitree T;
char pre[30],ord[30];
int n,m;
gets(pre);