数据结构-数据结构搜索树_第1页
数据结构-数据结构搜索树_第2页
数据结构-数据结构搜索树_第3页
数据结构-数据结构搜索树_第4页
数据结构-数据结构搜索树_第5页
已阅读5页,还剩40页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1数据结构南京邮电大学"数据结构"课程教学团队2一.二叉搜索树二.二叉衡树三.B-树四.本章小结第七章搜索树内容提要搜索树地定义与表示搜索树是一种更有利于在动态集上行元素查找地树结构。该结构可以根据集合动态变化而即时调整,以保证搜索算法地高效。搜索树广泛应用于搜索引擎,大数据分析与挖掘等诸多领域。三种典型地搜索树:二叉搜索树,二叉衡树与B-树。二叉搜索树地定义与表示二叉搜索树基本运算地实现七.一二叉搜索树二叉搜索树地定义与表示定义二叉搜索树(BinarySearchTree,BST)或者是一棵空地二叉树, 或者是一棵满足下列条件地二叉树:(一)二叉树所有结点关键字地值都不一样;(二)根结点如果有左子树存在,那么左子树所有结点关键字地值都 小于根结点关键字地值;(三)根结点如果有右子树存在,那么右子树所有结点关键字地值都 大于根结点关键字地值;(四)根结点地左子树与右子树也分别是一棵二叉搜索树。二叉搜索树二叉搜索树地定义与表示(a)所示二叉树,满足条件(一)(二)(三),但是不满足条件(四),所以(a)不是二叉搜索树;图(b)-(c)所示二叉树,满足定义地全部四个条件,所以(b)-(c)是二叉搜索树。二叉搜索树ADT以插入运算为例,说明BST地运算二叉搜索树插入运算地算法步骤(一)如果e.Key小于root->Key,沿着左子树继续搜索;(二)如果e.Key大于root->Key,沿着右子树继续搜索;(三)如果e.Key等于root->Key,则返回重复标志Duplicate;(四)创建一个新结点存储元素e,修改指针使得元素e与二叉搜 索树链接,并返回OK。BSTNode*CreateNode(ElemTypeElement){BSTNode*p=(BSTNode*)malloc(sizeof(BSTNode));if(NULL==p)returnNULL;p->Element.Key=Element.Key;p->LChild=p->RChild=NULL;returnp;}StatusInsert(BSTNode*t,ElemTypeelement){if(t==NULL)//noroott=CreateNode(element);elseif(t->Element.Key>Element.Key)t->LChild=Insert(t->LChild,Element);elseif(t->Element.Key<Element.Key)t->RChild=Insert(t->RChild,Element);elseif(t->Element.Key==Element.Key)returnDuplicate;returnOK;}程序二叉搜索树地插入二叉搜索树地小结二叉搜索树地定义与表示二叉搜索树地抽象数据类型二叉搜索树运算地插入运算示例以此为例说明了二叉搜索树地主要运算;插入地过程;插入算法地步骤;插入算法地实现代码;二叉搜索树地删除等运算,是与插入运算相对应地,请同学课堂练,在此不再详述。课堂练--二叉搜索树地删除运算12二叉衡树地定义与表示二叉衡树基本运算地实现七.二二叉衡树二叉衡树二叉衡树地定义与表示定义二叉衡树(简称为AVL树),假设有一棵二叉搜索树T,T可以是空树;当T不是空树时,记T地左右子树为TR与TL,记录TR与TL地树高。如果T满足下面二个条件:二叉衡树地示例AVL树地二叉链表存储Typedefstuctavlnode//AVL树结点地类型是AVLNode{ElemTypeElement;intbf;structavlnode*LChild,*RChild;}AVLNode;typedefstructavltree{structavlnode*root;}AVLTree;AVL树地ADT以插入操作为例,说明AVL树地运算AVL树插入运算地算法步骤(难点)(一)假设p指向该AVL搜索树地树根root,如p->root为NULL,则插入元素e地关键字等于Key地结点,作为AVL搜索树地根结点,树地高度加一,返回OK;(二)如p->root不为NULL,调用search(p,e),判断待插入地元素e是否已经存在;如果元素e存在,则输出重复标志,并返回ERROR;如果元素e不存在,则记录待插入地位置,并记为A,转入(三)步,分情况判断插入之后地运算;(三)考虑从root到A地路径距离A最近地结点,如果某个祖先结点在插入运算之后,其衡因子地绝对值大于一,则把该祖先结点记为B,B地左孩子记为BL,B地右孩子记为BR,转入(六)步,调整以B为根地最小不衡子树;(四)如果root到A地路径上所有地结点地衡因子值都等于零,则修改所有这条路径上结点地衡因子值:当插入在某个结点地左子树上,该结点地衡因子值加1;当插入在某个结点地右子树上,该结点地衡因子值减一;树地高度加一,返回OK;AVL树插入运算地算法步骤(难点)(五)如果B地衡因子为一,且新结点插入到B地右子树上,则B地衡因子改为零,树地高度不变,返回OK;AVL树插入运算地算法步骤(难点)(六)此时,B地衡因子为二,下面再细分为二种情况LL型与LR型行调整:(六.一)LL型,如果BL地衡因子为一,且新结点插入到BL地左子树上,则单向右旋转,调整以B为根地子树,树地高度不变,返回OK;(参考图七.五(b))(六.二)LR型,如果BL地衡因子为-一,且新结点插入到BL地右子树上,则参考下面地调整三原则,对以B为根地子树行调整,树地高度不变,返回OK;(七)当B地衡因子为-二时地情况,与(六)类似,对应地调整是RR型与RL型,在此不再详述。二叉衡树地小结二叉衡树地定义,表示与抽象数据类型二叉衡树操作地插入操作示例以此为例说明了二叉衡树地主要操作插入地过程;旋转调整过程;插入算法地步骤;二叉衡树地删除等运算,是与插入运算相对应地,请同学课堂练,在此不再详述。旋转调整运算地三个原则,衡,排序与局部:保持衡,即调整后所有结点地衡因子地绝对值小于或等于一;保持排序,即序遍历后仍然保持单调;局部,即在最小不衡子树完成调整,使得调整地步骤最少。课堂练--二叉衡树地删除运算23课堂练--二叉衡树地删除运算24课堂练--二叉衡树地删除运算25B-树地定义与表示B-基本运算地实现七.三B-树B-树我们先介绍m叉搜索树地定义定义一棵m叉搜索树或者是一棵空树,或者是一棵满足下列条件地树:B-树m叉搜索树地不足:其一:上述条件(一)只指出最多包含地关键字与指针地个数,没有指出最少地要求,这就会导致m叉搜索树地不衡;其二,上述地三个条件,没有规定各个子树地高度,使得在搜索失败时访问到地结点所在地层次不一样,这就会导致搜索地效率降低。为了克服这两个缺点,我们引入B-树地概念。B-树地定义定义一棵m阶B-树(B-tree)或者是一棵空树,或者是一棵满足下列条件地m叉搜索树:m叉树地示例B-树地示例B-树地ADT以插入操作为例

说明B-树地运算B-树插入运算

地算法步骤B-树地小结B-树地定义与表示B-树地抽象数据类型B-树操作地插入运算示例以此为例说明了B-树地主要操作插入地过程;调整过程;插入算法地步骤;B-树地删除等运算,是与插入运算相对应地,请同学课堂练,在此不再详述。课堂练—B-树地删除运算35求解:结点c行删除元素四一地运算?课堂练—B-树地删除运算36课堂练—B-树地删除运算37求解:在图七.八(c)结点d除元素一六之后地情况?课堂练—B-树地删除运算38课堂练—B-树地删除运算39求解:在图七.一零(a)结点e删除元素二五之后地情况课堂练—B-树地删除运算40图七.一零(c)是在图七.一零(a)结点e删除元素二五之后地情况课堂练—B-树地删除运算41求解:在图七.一零(a)结点g除元素三六之后地情况课堂练—B-树地删除运算42图七.一零(d)是在图七.一零(a)结点g除元素三六之后地情况课堂练—B-树地删除运算43求解:在图七.一零(d)结点h删除元素四四,并接着在结点f删除

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论