B-Tree
根节点至少包括两个孩子
树中每个节点最多含有m个孩子(m>=2) (限定深度)
除根节点和叶节点外,其他每个节点至少有ceil(m/2)个孩子,ceil取上限
K[n]为关键字,P[m]为结点指向数量,p代表的是指针,k代表的关键字
a:ki(i=1…n)为关键字,且关键字按顺序升序排序K(i-1)<Ki
b:关键字的个数n必须满足:ceil(m/2)-1<=n<=m—1
c:非叶子结点的指针:p[1],p[2],…p[M];其中p[1]指向关键字小于K[1]的子树,
P[M]指向关键字大于K[M-1]的子树
查找效率 O(logn)
![](https://i-blog.csdnimg.cn/blog_migrate/7dcc1e0c652d19e4236550deba4e5473.png)
2.B+Tree
B+树是B数的变体,其定义基本与B树相同,除了:
非叶子节点的子树指针与关键字个数相同
非叶子节点(树枝第二个节点)的子树指针P[i],指向关键字值[K[i],K[i+1])的子树
非叶子子节点仅仅用来索引,数据都保存在叶子子节点中
所有叶子节点均有一个链指针指向下一个叶子结点
B+Tree更适合用来做存储索引
B+Tree查询更稳定,稳定的O(logN)
B+Tree更有利于对数据库的扫描,有利于范围查询。
![](https://i-blog.csdnimg.cn/blog_migrate/8d6f3ebdc85d987dc9c8f986b9f50c6c.png)
3.红黑树特点:
时间复杂度O(logn)
根节点必须是黑色的
不能出现相邻的红色节点,红色节点不能有红色子节点或父节点。
添加节点
recolor(重新标记)如果x的parent红色,uncle红色,则标记p,u为黑色,g为红色,若为根节点则为黑色。只要符合规则就会一直重复执行。
Rotation(旋转、提拉)如果parent红色,uncle黑色,分为左左,左右,右左,右右,只要符合规则就会一直重复执行。
重标记
![](https://i-blog.csdnimg.cn/blog_migrate/d2abc37f3caabb604112ad4a70faa04d.png)
旋转-左左
![](https://i-blog.csdnimg.cn/blog_migrate/ca8559e4039370afe36e6e5a6d2f4223.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a168c11af17d40ebb3773357d49ab9d9.png)
旋转-左右
![](https://i-blog.csdnimg.cn/blog_migrate/37049cb270995eaa0e5f709fc94b100b.png)
旋转-右右
![](https://i-blog.csdnimg.cn/blog_migrate/3476d9ce12d29f1be27792fb64131ee0.png)
旋转-右左
![](https://i-blog.csdnimg.cn/blog_migrate/a25a915e00aca497bef87186cb504d7b.png)