数据结构实验指导书实验5

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

实验五二叉树操作

一、实验目的

1.进一步掌握指针变量的含义。

2.掌握二叉树的结构特征,以及各种存储结构的特点及使用范围。

3.掌握用指针类型描述、访问和处理二叉树的运算。

二、实验内容

示例程序1:广义表建立的二叉树(BTree1.cpp)

本示例程序定义了二叉树的二叉链表存储结构,并根据输入的二叉树广义表建立二叉树,实现了如下基本操作:建立(输入二叉树广义表,建立对应的二叉树存储结构)、遍历(先序遍历,中序遍历,后序遍历,按层遍历)、求二叉树所有结点数等。

程序代码如下:

#include

#include

#include

#include

#include

#define OK 1

#define TRUE 1

#define FALSE 0

#define NULL 0

#define OVERFLOW -1

typedef char ElemType; // 定义ElemType为char类型

//定义二叉树结点类型

typedef struct BTreeNode

{ ElemType data;

struct BTreeNode *left,*right;/*左右孩子指针*/

}BTreeNode,*BTree;

//二叉树基本操作说明

//初始化二叉树,即把树根指针置空

void InitBTree(BTree &T);

//根据存于字符数组a的二叉树广义表,建立对应的二叉树存储结构

//判断二叉树是否为空

bool BTreeEmpty(BTree T);

//按任意一种遍历次序输出二叉树中的所有结点

void TraverBTree(BTree T,int mark);

//求二叉树中所有结点数

int BTreeCount(BTree T);

//按照二叉树的一种表示方法输出整个二叉树

void PrintBTree(BTree T);

//清除二叉树,使之变成一棵空树

void ClearBTree(BTree &T);

//二叉树基本操作的实现

//初始化二叉树,即把树根指针置空

void InitBTree(BTree &T)

{T=NULL;}

//根据存于字符数组a的二叉树广义表,建立对应的二叉树存储结构void CreateBTree(BTree &T,char *a)

{BTree s[10];//s数组作为存储二叉树中根结点指针的栈

int top=-1; //top作为s栈的栈顶指针

T=NULL; //将树根指针置空

BTree p; //定义p为指向二叉树结点的指针

int k; //用k作为处理结点的左子树和右子树的标记,

//k=1处理左子树,k=2处理右子树

istrstream ins(a);//把字符串a定义为输入字符串流对象ins

char ch;

ins>>ch; //从ins流对象顺序读入一个字符

while(ch!='@')

{//每循环一次处理一个读入的字符,直到扫描到'@'字符为止

switch(ch)

{case '(':top++;s[top]=p;k=1;break;

case ')':top--;break;

case ',':k=2;break;

default:

p=new BTreeNode;

p->data=ch;

p->left=p->right=NULL;

if(T==NULL) T=p;

else {

if(k==1) s[top]->left=p;

else s[top]->right=p;

}

}

ins>>ch;

}

}

//判断二叉树是否为空

bool BTreeEmpty(BTree T)

{return T==NULL;}

//按任意一种遍历次序输出二叉树中的所有结点

void TraverBTree(BTree T,int mark)

{if(mark==1)//先序遍历

{if(T!=NULL)

{cout<data<<" ";

TraverBTree(T->left,mark);

TraverBTree(T->right,mark);

}

}

else if(mark==2)//中序遍历

{if(T!=NULL)

{TraverBTree(T->left,mark);

cout<data<<" ";

TraverBTree(T->right,mark);

}

}

else if(mark==3)//后序遍历

{if(T!=NULL)

{TraverBTree(T->left,mark);

TraverBTree(T->right,mark);

cout<data<<" ";

}

}

else if(mark==4)//按层遍历

{const MaxLength=30;

//定义存储二叉树结点指针的数组空间作为队列使用

相关文档
最新文档