一、二叉查找树
二叉树特性:左子树结点值<
根结点值<
右子树结点值
插入新结点后如何调整“不平衡"问题
二、平衡二叉树
树上任一结点的左子树和右子树的高度之差不超过1。
几个概念:
-
**结点的平衡因子:**左子树高-右子树高(平衡二叉树的平衡因子只可能是-1,0,1)
-
最小不平衡子树:从插入点往回找到第一个平衡结点,调整以该结点为根的子树
在插入操作中,只要将最小不平衡子树调整平衡,则其他祖先结点都会恢复平衡
三、红黑树
为什么要有这东西?有平衡二叉树不就够了吗?
四、B树
看之前的平衡二叉树有什么问题?看下面的图
不过要记住的是,这种树也必须满足 “平衡” 这种特性:不能有高度差
如果说满足上述特性,就说它是一个 B树
B树中所有结点的孩子个数的最大值称为B树的阶:也就是有最多的那个分叉数
五、B+树
B+树相较于B树:
直接看视频吧:https://www.bilibili.com/video/BV1VS411K7Xw/
B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子到根的距离相同。
B-Tree 索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始进行搜索。
根节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节点页中值的上限和下限。最终存储引擎要么是找到对应的值,要么该记录不存在。
叶子节点比较特别,它们的指针指向的是被索引的数据,而不是其他的节点页(不同引擎的“指针”类型不同)。图 5-1中仅绘制了一个节点和其对应的叶子节点,其实在根节点和叶子节点之间可能有很多层节点页。树的深度和表的大小直接相关。
B-Tree对索引列是顺序组织存储的,所以很适合查找范围数据。
六、哈希表
数据元素的关键字与其存储地址有直接相关,看下图
6.1 处理冲突的方法
- 拉链法:
98)]
6.1 处理冲突的方法
- 拉链法:[外链图片转存中…(img-QXJn3Jgq-1717546719898)]