二叉树运算实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

班级:计科112

*****

学号:**********05辅导老师:***

二叉树的各种基本运算

一、实验目的

1、使学生熟练掌握二叉树的逻辑结构和存储结构。

2、熟练掌握二叉树的各种遍历算法。

二、实验内容

[问题描述]

建立一棵二叉树,试编程实现二叉树的如下基本操作:

1. 按先序序列构造一棵二叉链表表示的二叉树T;

2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,

分别输出结点的遍历序列;

3. 求二叉树的深度/结点数目/叶结点数目;(选做)

4. 将二叉树每个结点的左右子树交换位置。(选做)

[基本要求]

从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),

[测试数据]

如输入:ABCффDEфGффFффф(其中ф表示空格字符)则输出结果为

先序:ABCDEGF

中序:CBEGDFA

后序:CGEFDBA

层序:ABCDEFG

[选作内容]

采用非递归算法实现二叉树遍历。

三、实验步骤

1.程序源码

#include

#include

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -1

#define MAX_TREE_SIZE 100

typedef TElem Type sqBiTree [MAX_TREE_SIZE ]; typedef struct BiTNode{

TElemType data;

struct BiTNode *lchild,*rchild;

}biTNode,*BiTree;

int CreateBtree(BiTree &T)

{

char c;

cin>>c;

if(c==‘#’) T=NULL;

else{

T=new BiTNode

if(!T) exit(OVERFLOW);

T->data=c;

create_tree(T->lchild);

create_tree(T->rchild);

}

return ok;

int preOrder(BiTree T) 先序遍历

{

if(T!=NULL)

{ cout<data;

preOrder(T–>lchild);

preOrder(T–>rchild);

}

}

return ok;

}

int InOrder(BiTree T) 中序遍历

{

if(T!=NULL)

{ inOrder(T–>lchild);

cout<data;

inOrder(T–>rchild);

}

return ok;

}

int PostOrder(BiTree T) 后序遍历

{

if(T!=NULL)

{ PostOrder(T–>lchild);

PostOrder(T–>rchild);

cout<data;

}

return ok;

}

int LevOrder(BiTree T) //层次遍历二叉树{

bitree p;

if(T)

{

enqueue(T);

while(front!=rear)

{

p=delqueue();

printf("%3c",p->data);

if(p->lch!=NULL)enqueue(p->lch);

if(p->rch!=NULL)enqueue(p->rch);

}

}

}

int main()

{

BiTree T

createBtree(T)

int i,j;

while(1){

cout<<"输入:"<

cout<<"输出结果为:"<

cout<<“先序:”<

cout<<“中序:”<

cout<<“后序:”<

cout<<“层序:”<

}

switch(j){

case1: CreateBtree(BiTree T);break;

case2: PreOrder(BiTree T);break;

case3: InOrder(BiTree T);break;

case4: ostOrder(BiTree T);break;

}

}

return 0;

}

四、实验总结(结果分析和体会)

通过本次实验我对二叉树有了更深的了解,对二叉逻辑结构、存储结构和各种遍历算法等基本上掌握了。同时,通过自己数次的调试、修改也搞懂了许多以前比较模糊的知识点,比如这次的界面是复制过来的,其中很多语句经过同学的讲解都理解了。但这次实验也有很多不尽人意的地方,比如由于没有将头结点空置,使得很多操作都比较复杂;还有就是本次实验电子报告中我原来打算加上各函数的简单流程图,但是由于我处理图形方面还比较不熟练,画了三四个小时也不太满意,所以索性将几个小时的努力通过del键结束了,所以这次报告不太令人满意,我将在以后的报告中加上示意图,多学习同学优秀的地方.也会在以后的学习过程中要尽量考虑周全,使程序更有实用价值,提高编程能力。

相关文档
最新文档