一。红黑树(RB-Tree)
红黑树是每个节点都有’颜色’特征的平衡二叉查找树。
除了一般平衡二叉树做具备的条件,它还具有如下特征:
1) 节点的颜色是红色或者黑色;
2) 根节点的颜色是黑色的;
3) 如果一个节点时带红色属性的,那么它的子节点必须是黑色的;
4) 所有叶子节点是黑色的(叶子节点为NULL节点);
5) 从任一节点开始到其叶子(NULL)节点的所有简单路径中,包含相同数目的黑色节点。
基于红黑树的实现的SGI STL容器包括:set,map,multiset,multimap等。
二。B树
B树是一种平衡的多叉树,通常所说的m阶B树应该具备这些条件:
1)每个节点最多有m个子节点;
2)除根节点和叶子节点外,每个节点至少有[ceil(m/2)]个子节点,ceil()为取上限函数;
3)所有的叶子节点都在同一层,叶子节点不包含任何关键字的信息;
4)有n个关键码的非叶子节点恰好有n+1个子节点。
B树多用于磁盘数据库的索引实现方式。
三。B+树
B+树是B树的变体,也是一种多叉搜索树。它与B树的主要区别是:
1)非叶子节点的子树指针与关键字个数相同;
2)非叶子节点的相邻子树指针p[i]和p[j],p[i]指向关键字键值在v[i]~v[j-1]之间;
3)所有需要查找的关键字信息存储在叶子节点,并且在它们之间增加了链表指针;非叶子节点只作为索引的一部分,也即是所有查到要搜索到叶子节点才能结束。
B+树中叶子节点增加链表指针是方便插入元素或者删除元素时引起的裂变或者合并操作的实现。B+树更加适合于文件索引系统。