首页 > 知识点讲解
       树表查找
知识路径: > 计算机系统基础知识 > 计算机软件基础知识 > 数据结构与算法 > 常用算法 > 常用算法 > 查找 > 
被考次数:1次     被考频率:低频率     总体答错率:52%     知识难度系数:     
相关知识点:9个      
        二叉查找树、B-树、红黑树等是常见的以树表方式组织的查找表。
               二叉查找树的查找过程
               二叉查找树是一种动态查找表,其特点是表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录。
               根据定义,非空的二叉查找树中左子树上所有结点的关键字均小于根结点的关键字,右子树上所有结点的关键字均大于根结点的关键字,因此,可将二叉查找树看成是一个有序表,其查找过程与折半查找过程相似。
               在二叉查找树上进行查找的过程为:若二叉查找树非空,将给定值与根结点的关键字值相比较,若相等,则查找成功;若不等,则当根结点的关键字值大于给定值时,到根的左子树中进行查找,否则到根的右子树中进行查找。若找到,则查找过程是走了一条从树根到所找到结点的路径;否则,查找过程终止于一棵空树。
               设二叉查找树以二叉链表为存储结构,结点的类型定义如下:
               
               【算法】二叉查找树的查找算法。
               
               二叉查找树中插入结点的操作
               二叉查找树是通过依次输入数据元素并把它们插入到二叉树的适当位置上构造起来的,即每读入一个元素,首先在二叉查找树中进行查找,若找到则不再插入,否则根据查找时得到的位置信息进行插入。其过程为:若二叉查找树为空,则为新元素创建结点并作为二叉查找树的根结点;若二叉查找树非空,则将新元素的值与根结点的值相比较,如果小于根结点的值,则继续在左子树中查找,否则在右子树中继续查找,直到某结点的值与新元素的值相等,或者到达空的子树为止,此时创建新元素的结点并替换该空的子树完成插入处理。设关键字序列为{46,25,54,13,29,91},则对应的二叉查找树构造过程如下图(a)~(g)所示。
               
               二叉查找树的构造过程
               从上面的插入过程还可以看到,每次插入的新结点都是二叉查找树上新的叶子结点,因此在进行插入操作时,不必移动其他结点,仅需改动某个结点的指针域,由空变为非空即可。这就相当于在一个有序序列上插入一个记录而不需要移动其他记录。
               另外,由于一棵二叉查找树的形态完全由输入序列决定,所以在输入序列已经有序的情况下,所构造的二叉查找树是一棵单枝树。从二叉查找树的查找过程可知,这种情况下的查找效率与顺序查找的效率相当。
               B_树
               一棵m阶的B_树,或为空树,或为满足下列特性的m叉树。
               (1)树中每个结点最多有m棵子树。
               (2)若根结点不是叶子结点,则最少有两棵子树。
               (3)除根之外的所有非终端结点最少有棵子树。
               (4)所有的非终端结点中包含下列数据信息:
               (nA0K1A1K2A2,…,KnAn
               其中,Kii=1,2,…,n)为关键字,且Ki<Ki+1i=1,2,…,n-1);Aii=0,1,…,n)为指向子树根结点的指针,且指针Ai-1所指子树中所有结点的关键字均小于Kii=1,2,…,n),An所指子树中所有结点的关键字均大于Knn为结点中关键字的个数且满足
               (5)所有的叶子结点都出现在同一层次上,并且不带信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空)。
               一棵4阶的B_树如下图所示。
               
               4阶B树示意图
               由B_树的定义可知,在B_树上进行查找的过程是:首先在根结点所包含的关键字中查找给定的关键字,若找到则成功返回;否则确定待查找的关键字所在的子树并继续进行查找,直到查找成功或查找失败(指针为空)时为止。
               B_树上的插入和删除运算较为复杂,因为要保证运算后结点中关键字的个数大于等于,因此涉及结点的“分裂”及“合并”问题。
               在B_树中插入一个关键字时,不是在树中增加一个叶子结点,而是首先在低层的某个非终端结点中添加一个关键字,若该结点中关键字的个数不超过m-1,则完成插入;否则,要进行结点的“分裂”处理。所谓“分裂”,就是把结点中处于中间位置上的关键字取出来插入到其父结点中,并以该关键字为分界线,把原结点分成两个结点。“分裂”过程可能会一直持续到树根。
               同样,在B_树中删除一个结点时,首先找到关键字所在的结点,若该结点在含有信息的最后一层,且其中关键字的数目不少于,则完成删除;否则需进行结点的“合并”运算。
               若待删除的关键字所在的结点不在含有信息的最后一层,则将该关键字用其在B_树中的后继替代,然后删除其后继元素,即将需要处理的情况统一转化为在含有信息的最后一层再进行删除运算。
 
 相关知识点:
 
软考在线指南
优惠劵及余额
在线支付
修改密码
下载及使用
购买流程
取消订单
联系我们
关于我们
联系我们
商务合作
旗下网站群
高级资格科目
信息系统项目管理师 系统分析师
系统架构设计师 网络规划设计师
系统规划与管理师
初级资格科目
程序员 网络管理员
信息处理技术员 信息系统运行管理员
中级资格科目
系统集成项目管理工程师 网络工程师
软件设计师 信息系统监理师
信息系统管理工程师 数据库系统工程师
多媒体应用设计师 软件评测师
嵌入式系统设计师 电子商务设计师
信息安全工程师
 

本网站所有产品设计(包括造型,颜色,图案,观感,文字,产品,内容),功能及其展示形式,均已受版权或产权保护。
任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
本站部分内容来自互联网或由会员上传,版权归原作者所有。如有问题,请及时联系我们。


工作时间:9:00-20:00

客服

点击这里给我发消息 点击这里给我发消息 点击这里给我发消息

商务合作

点击这里给我发消息

客服邮箱service@rkpass.cn


京B2-20210865 | 京ICP备2020040059号-5 |京公网安备 11010502032051号 | 营业执照 | Copyright ©2000-2023 All Rights Reserved 软考在线版权所有