二叉树-查找-遍历课件.ppt
《二叉树-查找-遍历课件.ppt》由会员分享,可在线阅读,更多相关《二叉树-查找-遍历课件.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章 查找(Search)7.1 7.1 查找基本概念查找基本概念7.2 7.2 基于线性表基于线性表静态查找静态查找7.3 7.3 基于基于树表动态查找树表动态查找7.4 7.4 哈希查找哈希查找1/11/20231第7章 查找Introduction查找查找是非数值处理中一种最基本、最重要的操作是非数值处理中一种最基本、最重要的操作。查找查找,也称检索,是一种运算,是软件设计中经常,也称检索,是一种运算,是软件设计中经常遇到的一种运算。数据结构不同,查找方法也会不遇到的一种运算。数据结构不同,查找方法也会不同。查找方法的好坏直接影响着计算机的使用效率。同。查找方法的好坏直接影响着计算机的
2、使用效率。查找概述查找概述1/11/20232第7章 查找7.1、查找基本概念1 1)查找)查找 Search Search:又称又称检索检索,是指在大量的数据中,是指在大量的数据中寻找关键寻找关键字等于给定值字等于给定值的记录。若存在这样一个记录,则称查找的记录。若存在这样一个记录,则称查找成功,否则称查找不成功。成功,否则称查找不成功。分为分为:静态查找静态查找;动态查找动态查找;2 2)关键字)关键字(Keyword)(Keyword):就是数据元素中可以唯一标识一个就是数据元素中可以唯一标识一个数据元素的数据项。数据元素的数据项。例如:学生管理登记卡中的学号。例如:学生管理登记卡中的学
3、号。3 3)平均查找长度)平均查找长度(Average Search Length)(ASL)(Average Search Length)(ASL)算法评价算法评价:评价时考虑:(评价时考虑:(1 1)速度;速度;(2 2)占用存储空间;占用存储空间;(3 3)复杂程度。复杂程度。1/11/20233第7章 查找 引入平均查找长度,作为查找算法评价的依据。引入平均查找长度,作为查找算法评价的依据。平均查找长度:为确定记录在表中的位置所进行的平均查找长度:为确定记录在表中的位置所进行的和关键字比较的次数的期望值,简写为和关键字比较的次数的期望值,简写为ASL.ASL.含有含有n n个元素的表中
4、找一个元素成功的个元素的表中找一个元素成功的ASLASL为:为:P Pi i为查找第为查找第i i个元素的概率;个元素的概率;C Ci i为为 查到第查到第i i个元素所需的比较次数。个元素所需的比较次数。ASL=Pi Cii=1i=1n n1/11/20234第7章 查找结构体数组 typedef structtypedef struct char name10;char name10;KeyType key;KeyType key;DataType;DataType;DataType rMaxnum;DataType rMaxnum;name0name9keyr0r1rMaxnumname
5、0name9key设表中记录以顺序存储结构组织。设表中记录以顺序存储结构组织。每个记录包括:关键字,其他数据项等。每个记录包括:关键字,其他数据项等。其类型说明用其类型说明用C C语言描述如下:语言描述如下:4)4)类型说明:类型说明:1/11/20235第7章 查找 5 5)查找方法)查找方法:顺序表静态查找,顺序表静态查找,树表动态查找,哈希查找树表动态查找,哈希查找7.27.2、基于线性表的静态查找、基于线性表的静态查找 顺序表上的查找主要有三种方法顺序表上的查找主要有三种方法:顺序查找法顺序查找法:针对顺序表存储结构针对顺序表存储结构 折半查找法折半查找法:针对有序顺序表存储结构针对有
6、序顺序表存储结构 分块查找分块查找:针对索引顺序表存储结构针对索引顺序表存储结构 1/11/20236第7章 查找i=01826322137566475i=1i=5i=4i=3i=2基本思想:从第一个元素开始,将给定值与表基本思想:从第一个元素开始,将给定值与表中逐个元素的关键字比较,直至检索成功或直中逐个元素的关键字比较,直至检索成功或直至最后一个元素检索失败为止。至最后一个元素检索失败为止。1.1.顺序查找:顺序查找:1/11/20237第7章 查找int Seqsearch(DataType r ,int key,int n)int i=0;while (r i.key!=key&i n
7、)i+;if (r i.key=key)return i ;else return -1 ;顺序查找算法:顺序查找算法:i=01826322137566475i=1i=5i=4i=3i=2演示:查找演示:查找key=56key=561/11/20238第7章 查找算法分析:算法分析:ASL=Pi Ci =1/n (1+2+.+n)*2 =n+1i=1n表从表从r r1-rMax,r01-rMax,r0存放存放keykey。改进算法:改进算法:希望尽量减少比较次数。希望尽量减少比较次数。1/11/20239第7章 查找32int seqsearch(DataType r,int key,int
8、n)int i;r0.key=key;i=n;while(ri.key!=key)i-;return i;i=81826322137566475i=7i=6i=5i=4i=30 1 2 3 4 5 6 7 8演示:查找演示:查找 key=32key=321/11/202310第7章 查找算法分析算法分析算法简单,效率较低算法简单,效率较低算法特点算法特点ASL=Pi Ci =(1/n)(1+2+.+n)=(n+1)/2i=1n1/11/202311第7章 查找2.折半查找法(对半或二分查找)折半查找法(对半或二分查找)针对有序表使用的查找方法,是简单有效的方法。针对有序表使用的查找方法,是简单
9、有效的方法。有序表:有序表:记录的关键字以记录的关键字以递增(或递减)递增(或递减)顺序排列的表。顺序排列的表。基本思想:基本思想:给定值给定值keykey与中间位置的记录的关键字比与中间位置的记录的关键字比 较,若相等则查找成功;若给定值大于中间较,若相等则查找成功;若给定值大于中间 位置记录的关键字值,则在表的后半部分继位置记录的关键字值,则在表的后半部分继 续折半查找;否则在表的前半部分进行折半续折半查找;否则在表的前半部分进行折半 查找,直至查找成功或不成功。查找,直至查找成功或不成功。1/11/202312第7章 查找步骤:步骤:(1 1)计算中间位置)计算中间位置 mid=(low
10、+high)/2mid=(low+high)/2取整。取整。(2 2)keykey与与Rmid.keyRmid.key比较比较 若若key=Rmid.keykey=Rmid.key则查找成功;则查找成功;若若keyRmid.key,keyRmid.key,keyRmid.key,则则low=mid+1,low=mid+1,转(转(3 3)。)。(3 3)若)若lowhigh,lowhigh,则重复(则重复(1 1)否则:查找不成功,结束。否则:查找不成功,结束。1/11/202313第7章 查找Searchlow1826324552668091highmid52668091 lowhighmi
11、d8091highLowmid用折半查找法在顺序表中用折半查找法在顺序表中查找关键字为查找关键字为8080的记录!的记录!1/11/202314第7章 查找low1826324552668091highmid lowhighmidhighLowmid18263245526680911826324552668091 low1826324552668091 high查找关键字为查找关键字为1010的记录!的记录!注意:使用折注意:使用折半查找算法时,半查找算法时,线性表中的元线性表中的元素必须按照关素必须按照关键字键字排列有序排列有序;并且必须以并且必须以顺顺序存储方式序存储方式存存储。储。1/1
12、1/202315第7章 查找int binsearch(DataType r,int n,int key)int binsearch(DataType r,int n,int key)int low,high,mid;int low,high,mid;low=0;low=0;high=n-1;high=n-1;while(low=high)while(low rmid.key)else if(key rmid.key)low=mid+1;low=mid+1;else high=mid-1;else high=mid-1;returu 1;returu 1;初始化初始化循环条件循环条件计算中间下
13、标计算中间下标查找成功查找成功前半部分前半部分后半部分后半部分查找失败查找失败1/11/202316第7章 查找int binsearch(DataType r,int n,int key)int low,high,mid;low=0;high=n-1;while(low rmid.key)low=mid+1;else high=mid-1;returu 1;low1826324552668091highmid52 66 80 91lowhighmid80 91highLow mid用折半查找法在顺序表中用折半查找法在顺序表中查找关键字为查找关键字为8080的记录!的记录!1/11/20231
14、7第7章 查找假设:查找关键字为假设:查找关键字为0-60-6的数据的数据折半法算法分析折半法算法分析3564102二叉判定树二叉判定树n假设:有序表长度为假设:有序表长度为n,n,且且n2n2h h-1-1n若若n=2n=2h h-1-1则:查找过程为一棵深度为则:查找过程为一棵深度为h h的满二叉树的满二叉树,n查找的过程形成二叉判定树查找的过程形成二叉判定树nASL=1/7(1+22+43)ASL=1/7(1+22+43)=2.43 =2.431/11/202318第7章 查找比顺序查找效率高比顺序查找效率高只适用于有序的顺序存储的表,只适用于有序的顺序存储的表,算法特点算法特点:ASL
15、log2(n+1)-1ASL=(1/n)2i-1 ii=1n则满二叉树的第则满二叉树的第 i i 层有层有2 2i-1i-1个结点。个结点。1/11/202319第7章 查找3.3.分块查找(索引顺序表查找)分块查找(索引顺序表查找)将顺序查找法与折半查找法结合将顺序查找法与折半查找法结合 基本思想:基本思想:使用分块查找算法时,要求将线性表均匀地使用分块查找算法时,要求将线性表均匀地分成若干分成若干块块,每块的元素不要求有序,但一,每块的元素不要求有序,但一定要保证定要保证块间有序块间有序。另外,对表要进行索引。另外,对表要进行索引存储。即新建一个索引表,存放各块中最大存储。即新建一个索引表
16、,存放各块中最大关键字。关键字。分块查找实际上是分块查找实际上是先先在索引表中进行在索引表中进行顺序查顺序查找找或或折半查找折半查找,再再在块内进行在块内进行顺序查找。顺序查找。1/11/202320第7章 查找索引表类型索引表类型:1.1.对单关键字建立索引表对单关键字建立索引表:2.2.对多关键字建立索引表对多关键字建立索引表:完全索引表完全索引表,多级索引表多级索引表.3.3.分块个数建立索引表分块个数建立索引表:等长等长,不等长不等长主表主表索引表索引表主表主表完全索完全索引表引表索引表索引表分块查找的基本过程如下:分块查找的基本过程如下:(1)(1)首先,将待查关键字首先,将待查关键
17、字K K与索引表中的关与索引表中的关键字进行比较,以确定待查记录所在的块。具键字进行比较,以确定待查记录所在的块。具体的可用顺序查找法或折半查找法进行。体的可用顺序查找法或折半查找法进行。(2)(2)进一步用顺序查找法,在相应块内查进一步用顺序查找法,在相应块内查找关键字为找关键字为K K的元素。的元素。1/11/202321第7章 查找 例如:例如:17 17,8 8,2121,1919,3131,3333,2525,2222,43 43,3737,35,4035,40,6161,7878,7373,5555分块分块1717,8 8,2121,1919,3131,3333,2525,2222
18、,43 43,3737,3535,40,6140,61,7373,7878,5555索引表:索引表:21 33 43 7821 33 43 7821334378关键字关键字 地址地址数据表数据表82131332543613735737819224055171/11/202322第7章 查找 typedef struct char name10;KeyType key;DataType;DataType rMax;typedef struct KeyType key;int link;indextype;indextype Lrm索引表结构:索引表结构:顺序表结构:顺序表结构:表结构说明:表结构
19、说明:1/11/202323第7章 查找int indexsearch(indextype Lr,DataType r,int key,int L,int m)int i,j;i=0;/*在索引表中顺序查找在索引表中顺序查找*/while(im&Lri.key=m)return-1;else /*在顺序表中顺序查找在顺序表中顺序查找*/j=Lri.link;while(key!=rj.key&j-Lri.linkL)j+;if(key=rj.key)return j;else return-1;索引表:索引表:Lr0 Lr0m-1m-1顺序表:顺序表:r r块长度:块长度:L L限制查找限制查
20、找的范围的范围1/11/202324第7章 查找int indexsearch(indextype Lr,DataType r,int key,int L,int m)int i,j;i=0;/*在索引表中顺序查找在索引表中顺序查找*/while(im&Lri.key=m)return-1;else /*在顺序表中顺序查找在顺序表中顺序查找*/j=Lri.link;while(key!=rj.key&j-Lri.linkL)j+;if(key=rj.key)return j;else return-1;演示演示:key=25:key=25L=4;M=3L=4;M=321033443882131
21、332543373519224017LrKey linkri=0i=1j=4j=5j=61/11/202325第7章 查找索引表采用顺序查找索引表采用顺序查找算法分析算法分析假设:长度为假设:长度为n n的顺序表分成的顺序表分成m m块,每块长度为块,每块长度为L,L,ASLb=(1/m)i =(m+1)/2i=1mASLw=(1/L)i =(L+1)/2i=1L块内采用顺序查找块内采用顺序查找ASLblocks=(m+1)/2+(L+1)/21/11/202326第7章 查找 效率介于顺序查找和折半查找之间效率介于顺序查找和折半查找之间 线性表存储结构为索引存储结构线性表存储结构为索引存储结
22、构算法特点算法特点索引表中采用折半查找索引表中采用折半查找ASLb=log2(m+1)-1ASLblocks=log2(m+1)-1+(L+1)/2ASLw=(L+1)/2总之:顺序表结构适用于查找操作,总之:顺序表结构适用于查找操作,不适于做插入和删除的操作。不适于做插入和删除的操作。1/11/202327第7章 查找7.3.7.3.基于树的查找基于树的查找用树结构存储记录既可查找又可插入和删除用树结构存储记录既可查找又可插入和删除1.1.树表查找方法:树表查找方法:二叉排序树查找二叉排序树查找 平衡二叉排序树查找平衡二叉排序树查找 B B-树查找树查找与折半查找类似,逐步缩小查找范围。与折
23、半查找类似,逐步缩小查找范围。2.2.二叉排序树查找二叉排序树查找1/11/202328第7章 查找(1)(1)二叉排序树的定义二叉排序树的定义:或是空树或是空树,或具有以下性质的二叉树或具有以下性质的二叉树:其左子树上所有结点的数据均其左子树上所有结点的数据均小于小于根结点的数据值根结点的数据值.其右子树上所有结点的数据均其右子树上所有结点的数据均大于或等于大于或等于根结点的根结点的数据值数据值.左、右子树又各是一棵二叉排序树。左、右子树又各是一棵二叉排序树。例:例:21181118201615101/11/202329第7章 查找(2 2)二叉排序树的生成)二叉排序树的生成生成一棵二叉排序
24、树生成一棵二叉排序树,过程如下过程如下:若二叉排序树为空,若二叉排序树为空,则令待插结点为根结点则令待插结点为根结点,若二叉排序树非空,若二叉排序树非空,则比较待插结点则比较待插结点(k1)(k1)和根结和根结点点(k2)(k2)的数据值。若的数据值。若k1k2,k1keykey)else if(s-keykey)t-L=insertbt(s,t-L);t-L=insertbt(s,t-L);else t-R=insertbt(s,t-R);else t-R=insertbt(s,t-R);return t;return t;1/11/202333第7章 查找插入的新结点都是二叉排序树的叶子结
25、插入的新结点都是二叉排序树的叶子结 点点.不必移动其它结点不必移动其它结点.常用于有序二叉树常用于有序二叉树 的插入的插入,删除删除.对二叉排序树采用中序遍历对二叉排序树采用中序遍历,其结果为一有序其结果为一有序序列序列.根结点的选择根结点的选择,决定二叉树的形状决定二叉树的形状,其形状决定其形状决定检索的效率检索的效率.根结点数据值最好选择元素序列根结点数据值最好选择元素序列的中间值的中间值.特点特点:1/11/202334第7章 查找BiTree*btsearch(BiTree*p,int key)/p指向二叉排序树的根结点指向二叉排序树的根结点while(p!=NULL)if(key=p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 查找 遍历 课件
限制150内