[关闭]
@Cesar 2015-12-01T18:26:48.000000Z 字数 2133 阅读 2910

B树,B+树,B-树以及红黑树等的概念以及原理

学习 Java

文章目录


1. B树

B树:即二叉搜索树,它的定义如下:

B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字。
如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销。在实际使用中,通常是在B树的基础上添加平衡算法,编程平衡二叉树。平衡二叉树又叫AVL树,是由作者姓名命名的,平衡二叉树还有一个改进的版本,叫做红黑树。


2. B-树

B-树:一种非二叉多路搜索树,它的定义是:

公式中,M为设定的非叶子节点最多子树的个数,N为关键字总数;所以B-树的性能总是等价于2分查找(与M值无关),也就没有B树平衡的问题;
由于M/2的限制,在插入节点的时候,如果节点已经满了,需要将节点分裂成两个各占M/2的节点;删除节点的时候,需要将两个不足M/2的节点合并


3. B+树

B+树:B-树的变体,同样是一种多路搜索树,定义基本与B-树相同,除了:
- 非叶子结点的子树指针与关键字个数相同而不是多一个
- 非叶子结点子树指针P[i],指向关键字值属于[K[i],K[i+1])的子树,(B-树是开区间);
- 为所有叶子结点增加了一个链指针;
- 所有关键字都在叶子结点出现.

eg:
B+树


4:红黑树,AVL,平衡二叉搜索树

红黑是弱平衡的,用非严格的平衡来换取增删节点时候旋转次数的降低,所以简单说,搜索的次数远远大于插入和删除,那么选择AVL树,如果搜索,插入删除次数几乎差不多,应该选择RB树。
红黑树上每个结点内含五个域,color,key,left,right,p。如果相应的指针域没有,则设为NIL。
一般的,红黑树,满足以下性质,即只有满足以下全部性质的树,我们才称之为红黑树:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。


5:AVL平衡二叉搜索树:

AVL平衡二叉搜索树定义:

平衡因子BF=左子树深度-右子树深度.
平衡二叉树每个结点的平衡因子只能是1,0,-1。若其绝对值超过1,则该二叉排序树就是不平衡的。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注