1、广东工业大学数据结构二叉树课程设计数据结构实验报告 题目:二叉树抽象数据类型 学 院 计算机学院 专 业 计算机科学与技术 年级班别 学 号 学生姓名 指导教师 成 绩 _2013年6月一实验概要实验项目名称: 二叉树抽象数据类型的实现实验项目性质: 设计性实验所属课程名称: 数据结构实验计划学时: 6二.实验目的1. 了解二叉树的定义以及各项基本操作。2. 实现二叉树存储、遍历及其他基本功能三. 实验仪器设备和材料 硬件:PC机 软件:Visual C+ 6.0四实验的内容1.二叉树类型定义以及各基本操作的简要描述;ADT BinaryTree 数据对象D:D是具有相同特性的数据元素的集合.
2、数据关系R:若D=,则R=,称BinaryTree为空二叉树;若D,则R=H,H是如下二元关系:(1) 在D中存在惟一的称为根的数据元素root,它在关系H下无前驱;(2) 若D-root,则存在D-root=D1,Dr,且D1Dr=;(3) 若D1,则D1中存在惟一的元素x1,H,且存在Dr上的关系HrH;H=,H1,Hr;(4) (D1,H1)是一棵符合本定义的二叉树,称为根的左子树,是一棵符合本定义的二叉树,称为根的右子树。基本操作P:InitBiTree(&T);操作结果:构造空二叉树T。DestroyBiTree(&T);初始条件:二叉树T存在。操作结果:销毁二叉树T。CreateB
3、iTree(&T,definition);初始条件:definition给出二叉树T的定义。操作结果:按definition构造二叉树T。ClearBiTree(&T);初始条件:二叉树T存在。操作结果:将二叉树T清为空树。BiTreeEmpty(T);初始条件:二叉树T存在。操作结果:若T为空二叉树,则返回TURE,否则FALSE。BiTreeDepth(T);初始条件:二叉树T存在。操作结果:返回T的深度。Root(T);初始条件:二叉树T存在。操作结果:返回T的根。Value(T,e);初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的值。Assign(T,&e,value)
4、; 初始条件:二叉树T存在,e是T中的某个结点。 操作结果:结点e赋值为value。Parent(T,e); 初始条件:二叉树T存在,e是T中的某个结点。操作结果:若e是T的非跟结点,则返回它的双亲,否则返回“空”。LeftChild(T,e);初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的左孩子。若e无左孩子,则返回“空”。RightChild(T,e);初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的右孩子。若e无右孩子,则返回“空”。LeftSibling(T,e);初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的左兄弟。若e无左孩子或无左兄弟
5、,则返回“空”。RightSibling(T,e); 初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的右兄弟。若e无右孩子或无右兄弟,则返回“空”。ADT BinaryTree2.存储结构:采用无头结点的链式存储结构实现3.源代码:头文件及存储结构:#include#include#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW 0#define MAXQSIZE 100 /最大队列长度typedef char TElemType; typedef struct BiTNode /二叉
6、树结构体 TElemType data; struct BiTNode *lchild,*rchild;BiTNode,*BiTree;typedef BiTree QElemType;typedef struct QNode QElemType data; struct QNode *next; QNode, *QueuePtr; /结点结构体typedef struct QueuePtr front; QueuePtr rear; LinkQueue; /链队列结构体 算法设计:int InitQueue(LinkQueue &Q) /构造空队列 Q.front = Q.rear = (Q
7、ueuePtr)malloc(sizeof(QNode); if(!Q.front) /存储分配失败 exit(OVERFLOW); Q.front-next = NULL; return OK; int EnQueue(LinkQueue &Q, QElemType e) /新元素入队尾 QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode); if(!p) /存储分配失败 exit (OVERFLOW); p-data = e; p-next = NULL; Q.rear-next = p; Q.rear = p; return OK; int DeQ
8、ueue(LinkQueue &Q, QElemType &e) /删除队头元素 QueuePtr p; if(Q.front = Q.rear) /队列为空队 return ERROR; p = Q.front-next; e = p-data; Q.front-next = p-next; if(Q.rear = p) /判断删除队头元素后,队列是否为空队 Q.rear = Q.front; free(p); return OK; int QueueEmpty(LinkQueue Q) /判断队列是否为空队 if (Q.front = Q.rear) return TURE; else r
9、eturn FALSE;int InitBiTree(BiTree &T) / 构造空二叉树 T = NULL; return OK;int DestroyTree(BiTree &T) /销毁二叉树 if(!T) return ERROR; else DestroyTree(T-lchild); DestroyTree(T-rchild); free(T); T=NULL; return OK;void CreateBiTree(BiTree &T) /用先序遍历的方式构建二叉树,以表示空结点。 TElemType ch; scanf(%c,&ch); if(ch=) T=NULL; els
10、e if(!(T=(BiTree)malloc(sizeof(BiTNode) exit(OVERFLOW); /分配存储空间失败 T-data=ch; CreateBiTree(T-lchild); /构造左子树 CreateBiTree(T-rchild); /构造右子树 int ClearBiTree(BiTree &T) /清空二叉树函数 if(!T) return ERROR; else ClearBiTree(T-lchild); ClearBiTree(T-rchild); free(T); T=NULL; return OK; int BiTreeEmpty(BiTree T)
11、 /判断二叉树是否为空 if(!T) return TURE; else return FALSE;int BiTreeDepth(BiTree T) /计算二叉树深度 int lcd,rcd; if(!T) return 0; lcd=BiTreeDepth(T-lchild); rcd=BiTreeDepth(T-rchild); return (lcdrcd?lcd:rcd)+1);TElemType Root(BiTree T) /判断二叉树是否空,若非空返回其根 if(BiTreeEmpty(T) return NULL; else return (T-data);TElemType
12、 Value(BiTree T,BiTree e) /返回e结点的值 return e-data;int Assign(BiTree T,BiTree &e,TElemType value) / 将value的值给结点e e-data=value; return OK;TElemType Parent(BiTree T,TElemType e)/返回双亲 LinkQueue q; QElemType a; if(T) InitQueue(q); EnQueue(q,T);/树根入队列 while(!QueueEmpty(q)/队不空 DeQueue (q, a);/出队,队列元素赋给a if(
13、a-lchild&a-lchild-data=e|a-rchild&a-rchild-data=e) /找到e return a-data; /返回双亲的值 else if(a-lchild) EnQueue(q,a-lchild);/入队列左孩子 if(a-rchild) EnQueue(q,a-rchild);/入队列右孩子 return NULL;BiTree Point(BiTree T,TElemType s)/返回二叉树T中指向元素值为S的结点指针 LinkQueue q; QElemType a; if(T) InitQueue(q); EnQueue(q,T); while(!QueueEmpty(q) DeQueue(q,a); if(a-data=s) return a; if(a-lchild) EnQueue(q,a-lchild); if(a-rchild) EnQueue(q,a-rchild); return N
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1