版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 数据结构教程 第三十一课 动态查找表数据结构教程 第三十一课 动态查找表 教学目的: 掌握二叉排序树的实现方法教学重点: 二叉排序树的实现教学难点: 构造二叉排序树的方法授课内容:一、动态查找表的定义动态查找表的特点是:表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。以政是动态查找表的定义:ADT DymanicSearchTable数据对象:是具有相同特性的数据元素的集合。各个数据元素均含有类型相同,可唯一标识数据元素的关键字。
2、数据关系:数据元素同属一个集合。基本操作:InitDSTable(&DT);DestroyDSTable(&DT);SearchDSTable(DT,key);InsertDSTable(&DT,e);DeleteDSTable(&DT,key);TraverseDSTable(DT,Visit();ADT DynamicSearchTable二、二叉排序树及其查找过程二叉排序树或者是一棵空树;或者是具有下列性质的二叉树:、若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;、若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;、它的左、右子
3、树了分别为二叉排序树。如果取二叉链表作为二叉排序树的存储结构,则上述查找过程如下:BiTree SearchBST(BiTree T,KeyType key)if(!T)|EQ(key,T->data.key) return (T);else if LT(key,T->data.key) return (SearchBST(T->lchild,key);else return (SearchBST(T->rchild.key);/SearchBST三、二叉排序树的插入和删除二叉排序树是一种动态树表,其特点是,树的结构通常不是一资生成的,面是在查找过程中,当树中不存在关键
4、字等于给定值的结点时再进行插入。新插入的结点一定是一个新添加的叶子结点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。Status SearchBST(BiTree T,KeyType key,BiTree f,BiTree &p)if(!T) p=f;return FALSE;else if EQ(key,T->data.key) p=T;return TRUE;else if LT(key,T->data.key) SearchBsT(T->lchild,key,T,p);else SearchBST(T->rchild,key,T,p
5、);/SearchBST插入算法:Status InsertBST(BiTree &T,ElemType e)if(!SearchBST(T,e.key,NULL,p)s=(BiTree)malloc(sizeof(BiTNode);s->data=e;s->lchild=s->rchild=NULL;if(!p) T=s;else if (LT(e.key,p->data.key) p->lchild=s;else p->rchild=s;return TRUE;else return FALSE;/InsertBST在二叉排序树中删除一个节点的算
6、法: Status DeleteBST(BiTree &T,KeyType key)if(!T) return FALSE;elseif EQ(key,T->data.key) Delete(T);else if LT(key,T->data.key) DeleteBST(T->lchild,key);else DeleteBST(T->rchild,key);return TRUE;void Delete(BiTree &p)if(!p->rchild)q=p; p=p->lchild; free(q);else if(!p-&g
7、t;lchild)q=p;p=p->rchild; free(q);else/方法一:如图示q=p;s=p->lchild;while(s->rchild)q=s;s=s->rchild/转左,然后向右到尽头p->data=s->data; /s指向被删结点的"前驱"if(q!=p)q->rchild=s->lchild; /重接*q的右子树else q->lchild=s->lchild;/重接*q的左子树 (方法一结束)/或可用方法二:/q=s=(*p)->l; /while(s->r) s=s-&
8、gt;r; /s->r=(*p)->r; /free(*p); /(*p)=q; 请看一个示例源程序。#include <alloc.h>#define ERROR 0;#define FALSE 0;#define TRUE 1;#define OK 1;typedef int ElemType;typedef int Status;typedef int KeyType;#define EQ(a,b) (a)=(b)#define LT(a,b) (a)< (b)#define LQ(a,b) (a)<=(b)typedef struct BinaryT
9、ree ElemType data; struct BinaryTree *l; struct BinaryTree *r;*BiTree,BiNode;BiNode * new() return( (BiNode *)malloc(sizeof(BiNode) );CreateSubTree(BiTree *T,ElemType *all,int i) if (alli=0)|i>16) *T=NULL; return OK; *T=new(); if(*T=NULL) return ERROR; (*T)->data=alli; CreateSubTree(&(*T)-
10、>l),all,2*i); CreateSubTree(&(*T)->r),all,2*i+1);CreateBiTree(BiTree *T) ElemType all16=0,1,2,3,0,0,4,5,0,0,0,0,6,0,0,0,; CreateSubTree(T,all,1);printelem(ElemType d) printf("%dn",d);PreOrderTraverse(BiTree T,int (*Visit)(ElemType d) if(T) if(Visit(T->data) if(PreOrderTraverse
11、(T->l,Visit)if(PreOrderTraverse(T->r,Visit) return OK; return ERROR; else return OK;InOrderTraverse(BiTree T,int (*Visit)(ElemType d) if(T) if(InOrderTraverse(T->l,Visit) if(Visit(T->data) if(InOrderTraverse(T->r,Visit) return OK; return ERROR; else return OK;Status SearchBST(BiTree T
12、,KeyType key,BiTree f,BiTree *p) if(!T) *p=f;return FALSE; else if EQ(key,T->data) *p=T;return TRUE; else if LT(key,T->data) SearchBST(T->l,key,T,p); else SearchBST(T->r,key,T,p);Status InsertBST(BiTree *T,ElemType e) BiTree p; BiTree s; if(!SearchBST(*T,e,NULL,&p) s=(BiTree)malloc(s
13、izeof(BiNode); s->data=e;s->l=s->r=NULL; if(!p) *T=s; else if (LT(e,p->data) p->l=s; else p->r=s; return TRUE; else return FALSE;void Delete(BiTree *p) BiTree q,s; if(!(*p)->r) q=(*p); (*p)=(*p)->l; free(q); else if(!(*p)->l) q=(*p); (*p)=(*p)->r; free(q); else /* q=(*p
14、); s=(*p)->l; while(s->r) q=s; s=s->r; (*p)->data=s->data; if(q!=(*p) ) q->r=s->l; else q->l=s->l; free(s); */ q=s=(*p)->l; while(s->r) s=s->r; s->r=(*p)->r; free(*p); (*p)=q; Status DeleteBST(BiTree *T,KeyType key) if (!(*T) ) return FALSE; else if ( EQ(key
15、,(*T)->data) Delete(T); else if ( LT(key,(*T)->data) DeleteBST( &(*T)->l), key); else DeleteBST( &(*T)->r),key); return TRUE; main() BiTree root; BiTree sroot=NULL; int i; int a10=45,23,12,3,33, 27,56,90,120,62; system("cls"); CreateBiTree(&root); printf("PreOrderTraverse:n"); PreOrderTraverse(root,printelem); printf("InOrderTraverse:n"); InOrderTraverse(root,printelem
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外研八下英语Unit 2 Starting out-Understanding ideas《合作探究二》课件
- 人教 八年级 语文 下册 第1单元《2.回延安 第2课时》课件
- 2026年食堂住宿合同(1篇)
- 2025 高中信息技术数据结构在海洋资源勘探数据处理中的应用课件
- 2026年施工增项合同(1篇)
- 2026年施工水泥购销合同(1篇)
- 修武租房合同收纳设计
- 包装材料生产能耗监测系统建设项目可行性研究报告
- 2026年邵阳市高三第二次联考试题化学+答案
- 2026年云南高中学业水平合格性考试生物模拟试卷(含答案解析)
- 2026年财政部部属单位公开招聘80人考试备考试题及答案解析
- 2026年江苏经贸职业技术学院单招综合素质考试题库附答案详解
- 2026河北衡水恒通热力有限责任公司公开招聘工作人员28名笔试备考试题及答案解析
- 2026春统编版(新教材)小学道德与法治一年级下册(全册)各单元知识点复习课件
- 吉水县2026年面向社会公开招聘农村(社区)“多员合一岗”工作人员【146人】笔试备考试题及答案解析
- 2026年常州工业职业技术学院单招综合素质考试题库附答案详解(达标题)
- 2026届高考语文复习:古代诗歌鉴赏课件
- 2026河南三门峡市辖区法院省核定聘用制书记员招聘74人考试参考题库及答案解析
- 山西九师联盟2026届高三3月第7次质量检测英语试卷(含答案详解)
- 【新教材】人教PEP版(2024)四年级下册英语 Unit 1 Class rules A Lets talk 教案
- 《工程勘察设计收费标准》(2002年修订本)-完整版-1
评论
0/150
提交评论