B树,B-树,B+和红黑树的区别

B树

       即二叉搜索树:

       1.所有非叶子结点至多拥有两个儿子(Left和Right);

       2.所有结点存储一个关键字;

       3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;

       如:

 B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;

否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入

右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;

       如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树

的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构

(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;

       如:

  但B树在经过多次插入与删除后,有可能导致不同的结构:

右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结构,和避免右图的结构,也就是所谓的“平衡”问题;      

实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在B树中插入和删除结点的策略;

B-树

插入——————————

以一个3阶的B树为例:

(1)如果该结点的关键字个数没有到达2个,那么直接插入即可; 
(2)如果该结点的关键字个数已经到达了2个,那么根据B树的性质显然无法满足,需要将其进行分裂

分裂的规则是该结点分成两半,将中间的关键字进行提升,加入到父亲结点中,但是这又可能存在父亲结点也满员的情况,则不得不向上进行回溯,甚至是要对根结点进行分裂,那么整棵树都加了一层。

例1——————————————

例2——————————————-

这里写图片描述

这里写图片描述

这里写图片描述

删除——————————

在B树的叶子结点b上删除关键字共有以下3种情况:

1. 假如b结点的关键字个数大于Min,说明删去该关键字后该结点仍满足B树的定义,则可直接删去该关键字。

2. 假如b结点的关键字个数等于Min,说明删去关键字后该结点将不满足B树的定义。若可以从兄弟结点借。

3. 假如b结点的关键字个数等于Min,说明删去关键字后该结点将不满足B树的定义。若不能从兄弟结点借。

红黑树

当在 10 亿数据中只需要进行十几次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀!    —学红黑树有感

因为(log (十亿) = 9)

1. 节点是红色或者黑色

2. 根节点是黑色

3. 每个叶子的节点都是黑色的空节点(NULL)

4. 每个红色节点的两个子节点都是黑色的,不是说两个子节点是黑色,父节点就必须是红色。

5. 从任意节点到其每个叶子的所有路径都包含相同的黑色节点。

参考:

http://www.360doc.com/content/18/0904/19/25944647_783893127.shtml

http://developer.51cto.com/art/201901/590926.htm

猜你喜欢

转载自blog.csdn.net/QQ2558030393/article/details/89810942