数据结构二叉树的遍历

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

数据结构实验报告

班级:

学号:

姓名:

计算机科学与技术学院

题目:二叉树的遍历

一、设计内容

从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行遍历。然后将遍历结果输出。先序、中序、后序遍历要求采用递归和非递归实现。对于如右图所示的二叉树,其扩展的先序遍历序列 为:A B D . G . . C E . . F . .空子树)

当输入扩展的先序遍历序列:

A B D . G . . C E . . F . . 输出应该为:

层次遍历:A B C D E F G 先序遍历:A B D G C E F 中序遍历:D G B A E C F

后续遍历:G D B E F C A 二、设计目的

1. 达到熟练掌握C++语言的基本知识和技能;

2. 能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 三、系统分析与设计(确定程序功能模块) 1.定义二叉链表存储结构

2.以先序遍历建立二叉链表,CreateBiTree(BiTree *bt)

3.实现先序遍历二叉树的递归算法, PreOrder(BiTree bt) 4实现中序遍历二叉树的递归算法, InOrder(BiTree bt) 5.实现后序遍历二叉树的递归算法, PostOrder(BiTree bt) 6.实现先序遍历二叉树的非递归算法,NRPreOrder (BiTree bt) 7.实现中序遍历二叉树的非递归算法,NRInOrder (BiTree bt) 8.实现后序遍历二叉树的非递归算法,NRPostOrder (BiTree bt) 9.实现层次遍历二叉树的递归算法,LevelOrder (BiTree bt) 10.调用各个函数输出遍历结果

四、源程序代码

#include "iostream.h"

#include "stdio.h"

#include "malloc.h"

typedef struct Node

{/*声明二叉树二叉链表节点的结构!*/

char data;

struct Node *lchild;

struct Node *rchild;

}BiTNode,*BiTree;

typedef struct

{/*定义结构体(将栈中元素的数据类型定义为指针和标志flag合并的结构体类型)*/

BiTree link;

int flag;

}stacktype;

//*************函数声明**************//

void Visite(char a);

void CreateBiTree(BiTree *bt);

void PreOrder(BiTree bt);

void InOrder(BiTree bt);

void PostOrder(BiTree bt);

void NRPreOrder (BiTree bt);

void NRInOrder (BiTree bt);

void NRPostOrder (BiTree bt);

void LevelOrder (BiTree bt);

//***********定义函数(访问节点的数据域)**********//

void Visite(char a)

{

cout<

}

//***********层次遍历二叉树**********//

void LevelOrder (BiTree bt)

{

BiTree queue[50];

int front,rear;

if (bt==NULL)

return;

front=-1;

rear=0;

queue[rear]=bt;

while (front !=rear)

{

front ++;

Visite (queue[front]->data);

if (queue[front]->lchild!=NULL)

{

rear++;

queue[rear]=queue[front]->lchild;

}

if (queue[front]->rchild!=NULL)

{

rear++;

queue[rear]=queue[front]->rchild;

}

}

}

//**********先序遍历建立二叉树***********// void CreateBiTree(BiTree *bt)

{

char ch;

ch=getchar();

if (ch=='.') *bt=NULL;

else

{

*bt=(BiTree) malloc(sizeof(BiTNode));

(*bt)->data=ch;

CreateBiTree(&((*bt)->lchild));

CreateBiTree(&((*bt)->rchild));

}

}

//**********递归先序遍历二叉树bt***********// void PreOrder(BiTree bt)

{

if(bt==NULL) return;

cout<data<<" ";

PreOrder (bt->lchild);

PreOrder (bt->rchild);

}

//**********递归中序遍历二叉树bt***********// void InOrder(BiTree bt)

{

if(bt==NULL) return;

InOrder (bt->lchild);

cout<data<<" ";

InOrder (bt->rchild);

}

//**********递归后序遍历二叉树bt***********// void PostOrder(BiTree bt)

{

if(bt==NULL) return;

PostOrder (bt->lchild);

PostOrder (bt->rchild);

cout<data<<" ";

}

//**********非递归先序遍历二叉树bt*********// void NRPreOrder (BiTree bt)

{

相关文档
最新文档