二叉树抽象数据类型.doc
《二叉树抽象数据类型.doc》由会员分享,可在线阅读,更多相关《二叉树抽象数据类型.doc(19页珍藏版)》请在沃文网上搜索。
1、 题目:二叉树抽象数据类型 一实验概要实验项目名称: 二叉树抽象数据类型的实现实验项目性质: 设计性实验所属课程名称: 数据结构实验计划学时: 6二.实验目的1. 了解二叉树的定义以及各项基本操作。2. 实现二叉树存储、遍历及其他基本功能三. 实验仪器设备和材料 硬件:PC机 软件:Visual C+ 6.0四实验的内容1.二叉树类型定义以及各基本操作的简要描述;ADT BinaryTree 数据对象D:D是具有相同特性的数据元素的集合.数据关系R:若D=,则R=,称BinaryTree为空二叉树;若D,则R=H,H是如下二元关系:(1) 在D中存在惟一的称为根的数据元素root,它在关系H下
2、无前驱;(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。CreateBiTree(&T,definition);初始条件:definition给出二叉树T的定义。操作结果:按definition构造二叉树T。ClearBiTre
3、e(&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); 初始条件:二叉树T存在,e是T中的某个结点。 操作结果:结点e赋值为value。Parent(T,e); 初始条件:二叉树T存在,e是T中的某个结点。操作
4、结果:若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无左孩子或无左兄弟,则返回“空”。RightSibling(T,e); 初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的右兄弟。若e无右孩子或无右兄弟,则返回“空
5、”。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 /二叉树结构体TElemType data;struct BiTNode *lchild,*rchild;BiTNode,*BiTree;typedef BiTre
6、e 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 = (QueuePtr)malloc(sizeof(QNode);if(!Q.front) /存储分配失败 exit(OVERFLOW); Q.front-next =
7、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 DeQueue(LinkQueue &Q, QElemType &e) /删除队头元素 QueuePtr p; if(Q.front = Q.rear) /队列为空队 re
8、turn 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;elsereturn FALSE;int InitBiTree(BiTree &T) / 构造空二叉树 T = NULL;return OK;int DestroyTree(BiTr
9、ee &T) /销毁二叉树if(!T)return ERROR;elseDestroyTree(T-lchild);DestroyTree(T-rchild);free(T);T=NULL;return OK;void CreateBiTree(BiTree &T) /用先序遍历的方式构建二叉树,以表示空结点。 TElemType ch;scanf(%c,&ch);if(ch=)T=NULL;elseif(!(T=(BiTree)malloc(sizeof(BiTNode)exit(OVERFLOW); /分配存储空间失败T-data=ch;CreateBiTree(T-lchild); /构
10、造左子树CreateBiTree(T-rchild); /构造右子树int ClearBiTree(BiTree &T) /清空二叉树函数if(!T)return ERROR;elseClearBiTree(T-lchild);ClearBiTree(T-rchild);free(T);T=NULL;return OK;int BiTreeEmpty(BiTree T) /判断二叉树是否为空if(!T)return TURE;elsereturn FALSE;int BiTreeDepth(BiTree T) /计算二叉树深度int lcd,rcd;if(!T)return 0;lcd=BiT
11、reeDepth(T-lchild);rcd=BiTreeDepth(T-rchild);return (lcdrcd?lcd:rcd)+1);TElemType Root(BiTree T) /判断二叉树是否空,若非空返回其根if(BiTreeEmpty(T)return NULL;elsereturn (T-data);TElemType Value(BiTree T,BiTree e) /返回e结点的值return e-data;int Assign(BiTree T,BiTree &e,TElemType value) / 将value的值给结点ee-data=value;return
12、 OK;TElemType Parent(BiTree T,TElemType e)/返回双亲LinkQueue q;QElemType a;if(T)InitQueue(q);EnQueue(q,T);/树根入队列while(!QueueEmpty(q)/队不空DeQueue (q, a);/出队,队列元素赋给aif(a-lchild&a-lchild-data=e|a-rchild&a-rchild-data=e) /找到ereturn a-data; /返回双亲的值elseif(a-lchild)EnQueue(q,a-lchild);/入队列左孩子if(a-rchild)EnQueue
13、(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 NULL;TElemType LeftChild(BiTree T,
14、TElemType e)/返回e的左孩子 BiTree a; if(T) a=Point(T,e);/a是指向结点e的指针 if(a&a-lchild)return a-lchild-data;return NULL;TElemType RightChild(BiTree T,TElemType e) /返回e的右孩子BiTree a;if(T)if(a=Point(T,e)&a-rchild)return a-rchild-data; return NULL;TElemType LeftSibling(BiTree T,TElemType e) /返回左兄弟TElemType a;BiTre
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 抽象 数据类型