数据结构与算法——树(2)

树是目前大家用得最多的数据结构之一,而且品种繁多。所以在这里再开一讲,但是现在所讲的树大多都是应用于硬盘的。

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+树开始引用自 http://blog.csdn.net/v_JULY_v/article/details/6530142

尽管我们说B树的好处特别多,但是他还是有缺陷的。我们需要遍历来顺序查找树种的元素,这是在内存中进行的。在B树种往返与每个节点之间,意味着每次都在硬盘的内存块之间多次的访问。而且我们每次遍历都会遍历节点中得元素,这非常糟糕,所以B+树比B树更适合做数据库的索引跟操作系统的文件搜索。
B+树是应文件系统产生的一种B树的变形树,严格的讲他不是我们前面所说的基础树了。
所有叶子节点包含全部的关键字信息,


B*树

B*树是B+树的变形,在B+树的基础上增加了指向兄弟的指针如下图。B*树的分裂:当一个节点满时,如果他得兄弟节点未满,那一部分数据会转移到兄弟节点当中。如果兄弟节点也满了,就再原节点和兄弟节点之间建立节点同时各转移1/3的数据到新节点当中,最后根节点和新节点建立连接。所以B*树的空间利用比B+树高。




R树

R树( Rectangle,可不是Region哟。。)。B树和B+树能很好的解决一维空间的存储问题,B树是一颗平衡树,它把一条直线分成若干段。当满足哪段的要求时就哪段去,逐步缩小范围。
举个R树在现实领域中能够解决的例子:查找20英里以内所有的餐厅。如果没有R树你会怎么解决?一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中,一个字段记录经度,另一个字段记录纬度。这样的话我们就需要遍历所有的餐厅获取其位置信息,然后计算是否满足要求。如果一个地区有100家餐厅的话,我们就要进行100次位置计算操作了,如果应用到谷歌地图这种超大数据库中,这种方法便必定不可行了。
这幅图很形象的介绍了R树,什么意思呢R树是矩形树,在二维的定义上就是大圈套小圈。像上个地图上如果要查某个你需求红点时,在B树中就要遍历全部地图。那么R树的一圈套一圈,只要遍历某个符合条件的圈就可以了,而不用遍历整张地图。

这个东西有概念就好,想求知的去找资源吧。这里就不详细介绍下面说下红黑树
在看数据结构之前我对红黑树的感觉就是特别神奇,但是一眼就应该能明白,他是只有红黑两种的树。实际上还真是:
1.节点非红即黑。
2.根节点是黑色。
3.所有红节点的子节点都为黑色。
4.从一个节点到一个null指针的所有路径上都包含相同数目的黑节点。

当我们在对红黑树进行插入和删除等操作时,对树做了修改,那么可能会违背红黑树的性质。
为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树种某些结点的颜色及指针结构,以达到对红黑树进行
插入、删除结点等操作时,红黑树依然能保持它特有的性质(如上文所述的,五点性质)。

自底向下插入:
如果要插入的父节点是黑色,那就顺利插入。如果是红色,我们就得到爽红色节点,必须调整树。我们可以用单双旋转来调整红黑位置





















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值