二叉树的建立及遍历

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

inorder(T->rchild );

}

}

void inpre(struct node *T)

{

if(!T)

return;

else

{

cout<data;

inpre(T->lchild );

inpre(T->rchild );

}

}

void postorder(struct node *T) {

if(!T)

return;

else

{

postorder (T->lchild );

postorder (T->rchild );

cout<data;

}

}

//先序非递归遍历

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<data;

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<data;

p=p->rchild ;

}

}

//主函数

int main()

{

bitree T;

char pre[30],ord[30];

int n,m;

gets(pre);

相关文档
最新文档