B树-查找
B树系列文章
1. B树-介绍
2. B树-查找
3. B树-插入
4. B树-删除
查找
假设有一棵3阶B树,如下图所示。
下面说明在该B树中查找52的过程
首先,从根结点出发,根结点有两个键40和70,52在40和70之间,因此查找根结点的第二个儿子结点
接着,查找根结点的第二个儿子结点,该结点的第一个键值为55,52小于55,因此查找52可能在该结点的第一个儿子结点上
此时到达叶子结点,遍历该结点的键值列表,发现52在该键值列表上,说明该B树上有目标键值,搜索结束
到达叶子结点时,如果叶子结点上没有目标键值,说明B树上没有目标键值,搜索结束。
可以看出来,上述都给经历过的每个结点的 第一个不小于52的键值 标红处理了
这个 键值在键值数组的 下标 刚好是 要访问的儿子结点 在儿子结点列表里 的 下标。
这里是查找的代码
/**
* 查找key, 返回key所在结点及下标
* 采用递归的方法
**/
func (bTreeNode *BTreeNode) search(key int) (*BTreeNode, int) {
if bTreeNode.isLeaf || bTreeNode.keyNum == 0 {
return nil, -1
} // 找到第一个不比key小的,注意leaf的数量比key数量多1
idx := 0
for idx < bTreeNode.keyNum && key > bTreeNode.keyList[idx] { // 这里可以采用二分查找提高效率
idx++
} // 在当前节点找到了key
if idx < bTreeNode.keyNum && bTreeNode.keyList[idx] == key {
return bTreeNode, idx
} // 是叶子结点 则找不到了
if bTreeNode.leafList[idx].isLeaf {
return nil, -1
} return bTreeNode.leafList[idx].search(key)
} /** 查找key, 返回key所在结点及下标
* 时间复杂度为O(logn)
**/
func (bTree *BTree) Search(key int) (*BTreeNode, int) {
return bTree.root.search(key)
}
B树-查找的更多相关文章
- 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件
老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...
- 字典树(查找树) leetcode 208. Implement Trie (Prefix Tree) 、211. Add and Search Word - Data structure design
字典树(查找树) 26个分支作用:检测字符串是否在这个字典里面插入.查找 字典树与哈希表的对比:时间复杂度:以字符来看:O(N).O(N) 以字符串来看:O(1).O(1)空间复杂度:字典树远远小于哈 ...
- 【九度OJ】题目1176:树查找 解题报告
[九度OJ]题目1176:树查找 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1176 题目描述: 有一棵树,输出某一深度的所有节点 ...
- 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找
千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...
- 9-11-Trie树/字典树/前缀树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第9章 查找 - Trie树/字典树/前缀树(键树) ——<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚 ...
- 9-9-B+树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第9章 查找 - B+树 ——<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题 ...
- 9-8-B树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第9章 查找 - B树 ——<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集 ...
- 初级字典树查找在 Emoji、关键字检索上的运用 Part-2
系列索引 Unicode 与 Emoji 字典树 TrieTree 与性能测试 生产实践 在有了 Unicode 和 Emoji 的知识准备后,本文进入编码环节. 我们知道 Emoji 是 Unico ...
- poj2828(线段树查找序列第k小的值)
题目链接:https://vjudge.net/problem/POJ-2828 题意:有n个人,依次给出这n个人进入队列时前面有多少人p[i],和它的权值v[i],求最终队列的权值序列. 思路:基本 ...
随机推荐
- Node.js精进(7)——日志
在 Node.js 中,提供了console模块,这是一个简单的调试控制台,其功能类似于浏览器提供的 JavaScript 控制台. 本系列所有的示例源码都已上传至Github,点击此处获取. 一.原 ...
- 广东省30m二级分类土地利用数据(矢量)
数据下载链接:百度云下载链接 广东省,地处中国大陆最南部,属于东亚季风区,从北向南分别为中亚热带.南亚热带和热带气候,是中国光.热和水资源最丰富的地区之一.主要河系为珠江的西江.东江.北江和三角洲水 ...
- android studio 初印象
ANSROID STUDIO sdk 目录 build-tools目录,存放各版本Android的各种编译工具. docs目录,存放开发说明文档. extras\android目录,存放兼容低版本的新 ...
- 虚拟机启动时报’A start job is running for /etc/rc.local .. Compatibility错误。
虚拟机启动时报'A start job is running for /etc/rc.local .. Compatibility错误. 问题已经存在很长时间了,但是不影响ssh登录,遂置之未理. 经 ...
- Fleet 使用感受
1. 前言 笔者主要使用的编程语言是 Java.平时使用的 IDE 是 JetBrains 公司的 IntelliJ IDEA.有时候也会打开该公司旗下的 PyCharm.DataGrip.WebSt ...
- SpringMVC pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- 2022-7-13 java_1 第七组 刘昀航
@ 目录 前言 一.一些基本的指令 二.java 1.java的三个版本 2.java特点 3.运行一个java程序 三.java的数据类型 1.java基本数据类型 2.强制转换的原理 3.八种基本 ...
- # 8 快速入门 dubbo
8 快速入门 dubbo 所需资料 注册中心 Zookeeper 安装 zookeeper 官方推荐使用 zookeeper 注册中心: 注册中心负责服务地址的注册与查找,相当于目录服务: 服务提供者 ...
- linux学习系列--初识Linux系统
### 认识Linux- Linux是一种类UNIX的系统,Unix是1965年在贝尔实验室开发的一个项目,用来开发操作系统- Linux之父-Linus Torvalds在1991年10月5日,他在 ...
- 从零开始Blazor Server(2)--整合数据库
开篇 上一篇文章我们留了个尾巴,没有把freesql整合进去,这篇文章我们来整合. 目前的思路呢,是做一个简单的四不像的RABC,也有用户.角色. 权限三部分. 但是其中每个用户只有一个角色,即用户和 ...