树是目前大家用得最多的数据结构之一,而且品种繁多。所以在这里再开一讲,但是现在所讲的树大多都是应用于硬盘的。
2-3树
每一个节点都有2个节点或三个节点,所以叫2-3树。下图的右子树就是由2个节点和三个节点。但大家请仔细看,这不光是一颗2-3树,还是一颗二叉查找树。
下面是2-3树的添加跟删除,一般插入就不讲了,没什么特别的,下面讲的是比较特殊的插入。
如图8-8-4,2-3树每个节点最多放两个元素,如果吧5插入6 7之间就超过了2-3树的标准,因为6大与5小于7,所以上升到第二层节点。
如图8-8-5,将11插入9与10之间,同上原理,所以10应该上升到第二层节点,但是第二层节点已经有两个了,为了不破坏2-3树的规则,12上升到根节点,10在8与12之间。
最后一种2-3树的特殊情况,将2插入1和3之间,同2-3树规则,因为1>2>3,所以2应该提升到第二层节点。同2-3树规则2>4>6所以4应该上升到根节点。同2-3树规则,4>8>12所以8应该向上升一级。
2-3树删除:依然不讲普通的删除规则。
删除1节点之后,最后的以4为根的树就剩下4 6 7,因为二叉查找树的规则,根节点必须比左大比右小,所以4下降6上升,形成图8-8-9中的结果。
特殊情况2:如果删除4为了保持左右子树的平衡(AVL)。直接左旋转是不行的,那就得使用右左旋转,9上升8下降,然后删除掉4,因为6>7>8所以最终结果就成下图
如果左右旋转没懂,请看我的“数据结构与算法——树”之中的AVL左右旋转讲解。
2-3树删除特殊情况3:如果删除8,此时因为6,7>9所以67应该存放在一个子节点中,然后因为9>13>14>15,所以形成下图
2-3-4树
如果理解了2-3树,那么2-3-4树就迎刃而解。2-3-4树的规则是:节点最多有3个数4个子节点或者没有子节点。如图8-8-15是2-3-4树的生成过程,而8-8-16是删除过程。
b树
很多人都听过B树这个概念,甚至可能有人直接看这个位置,其实不必,我们从一开始讲的就是B树。B树是一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例。2-3树就是3阶B树,2-3-4树就是4阶B树。最大得孩子数就是B树的阶
至于添加和删除,是与2-3树一样的,只不过数目可能很大。
b+树
B+树是应文件系统产生的一种B树的变形树,严格的讲他不是我们前面所说的基础树了。
![](http://hi.csdn.net/attachment/201106/7/8394323_1307440587b6WG.jpg)
B*树
![](http://hi.csdn.net/attachment/201106/7/8394323_13074405869mSW.jpg)
R树
![](http://hi.csdn.net/attachment/201106/8/8394323_1307492843D0oO.jpg)
![](https://i-blog.csdnimg.cn/blog_migrate/ed7fb348350fb75ab81783ca57db48b7.png)
当我们在对红黑树进行插入和删除等操作时,对树做了修改,那么可能会违背红黑树的性质。
为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树种某些结点的颜色及指针结构,以达到对红黑树进行
插入、删除结点等操作时,红黑树依然能保持它特有的性质(如上文所述的,五点性质)。