红黑树
是一种自平衡的二叉查找树,是一种高效的查找树。
特点:
1.每个节点或者是黑色,或者是红色。
2.根节点是黑色。
3.每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
4.如果一个节点是红色的,则它的子节点必须是黑色的。
5.从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。
如图:
B树
B树,Balance Tree,即为平衡树
一个m阶的B树具有如下几个特征:
1.根结点至少有两个子女。
2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。
B 树中如何查找数据
B 树的子树大小排序规则,因此在 B 树中查找数据时,一般需要这样:
1.从根节点开始,如果查找的数据比根节点小,就去左子树找,否则去右子树
2.和子树的多个关键字进行比较,找到它所处的范围,然后去范围对应的子树中继续查找
3.以此循环,直到找到或者到叶子节点还没找到为止
B 树的每个节点可以表示的信息更多,因此整个树更加“矮胖”,这在从磁盘中查找数据(先读取到内存、后查找)的过程中,可以减少磁盘 IO 的次数,从而提升查找速度。
B+树
B+ 树是对 B 树的进一步优化。
B+ 树和 B 树不同之处:
1.B+ 树非叶子节点上是不存储数据的,仅存储键值,而 B 树节点中不仅存储键值,也会存储数据。
2.因为 B+ 树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的。
B+是在在B树基础上,为叶子结点增加链表指针(B树+叶子有序链表),所有关键字都在叶子结点 中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中。