教你透彻了解红黑树

教你透彻了解红黑树

ID:16343805

大小:377.14 KB

页数:21页

时间:2018-08-09

教你透彻了解红黑树_第1页
教你透彻了解红黑树_第2页
教你透彻了解红黑树_第3页
教你透彻了解红黑树_第4页
教你透彻了解红黑树_第5页
资源描述:

《教你透彻了解红黑树》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、红黑树系列,六篇文章于今日已经完成:1、教你透彻了解红黑树2、红黑树算法的实现与剖析3、红黑树的c源码实现与剖析4、一步一图一代码,R-BTree5、红黑树插入和删除结点的全程演示6、红黑树的c++完整实现源码------------------------------ 一、红黑树的介绍先来看下算法导论对R-BTree的介绍:红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 前面说了,红黑树,是一种二

2、叉查找树,既然是二叉查找树,那么它必满足二叉查找树的一般性质。下面,在具体介绍红黑树之前,咱们先来了解下二叉查找树的一般性质:1.在一棵二叉查找树上,执行查找、插入、删除等操作,的时间复杂度为O(lgn)。   因为,一棵由n个结点,随机构造的二叉查找树的高度为lgn,所以顺理成章,一般操作的执行时间为O(lgn)。   //至于n个结点的二叉树高度为lgn的证明,可参考算法导论第12章二叉查找树第12.4节。2.但若是一棵具有n个结点的线性链,则此些操作最坏情况运行时间为O(n)。 而红黑树,能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn)。ok,

3、我们知道,红黑树上每个结点内含五个域,color,key,left,right,p。如果相应的指针域没有,则设为NIL。一般的,红黑树,满足以下性质,即只有满足以下全部性质的树,我们才称之为红黑树:1)每个结点要么是红的,要么是黑的。2)根结点是黑的。3)每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的。4)如果一个结点是红的,那么它的俩个儿子都是黑的。5)对于任一结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点。(注:上述第3、5点性质中所说的NULL结点,包括wikipedia.算法导论上所认为的叶子结点即为树尾端的NIL指

4、针,或者说NULL结点。然百度百科以及网上一些其它博文直接说的叶结点,则易引起误会,因,此叶结点非子结点)如下图所示,即是一颗红黑树(下图引自wikipedia:http://t.cn/hgvH1l):此图忽略了叶子和根部的父结点。同时,上文中我们所说的"叶结点"或"NULL结点",如上图所示,它不包含数据而只充当树在此结束的指示,这些节点在绘图中经常被省略,望看到此文后的读者朋友注意。 二、树的旋转知识当我们在对红黑树进行插入和删除等操作时,对树做了修改,那么可能会违背红黑树的性质。为了保持红黑树的性质,我们可以通过对树进行旋转,即修改树种某些结点的颜色及指针

5、结构,以达到对红黑树进行插入、删除结点等操作时,红黑树依然能保持它特有的性质(如上文所述的,五点性质)。树的旋转,分为左旋和右旋,以下借助图来做形象的解释和介绍:1.左旋如上图所示:当在某个结点pivot上,做左旋操作时,我们假设它的右孩子y不是NIL[T],pivot可以为树内任意右孩子而不是NIL[T]的结点。左旋以pivot到y之间的链为“支轴”进行,它使y成为该孩子树新的根,而y的左孩子b则成为pivot的右孩子。来看算法导论对此操作的算法实现(以x代替上述的pivot):1. LEFT-ROTATE(T, x)  1.1  y ← right[x] ▹

6、 Set y.  2.2  right[x] ← left[y]      ▹ Turn y's left subtree into x's right subtree.  3.3  p[left[y]] ← x  4.4  p[y] ← p[x]             ▹ Link x's parent to y.  5.5  if p[x] = nil[T]  6.6     then root[T] ← y  7.7     else if x = left[p[x]]  8.8             then left[p[x]] ← y  9.9 

7、            else right[p[x]] ← y  10.10  left[y] ← x             ▹ Put x on y's left.  11.11  p[x] ← y  2.右旋右旋与左旋差不多,再此不做详细介绍。 对于树的旋转,能保持不变的只有原树的搜索性质,而原树的红黑性质则不能保持,在红黑树的数据插入和删除后可利用旋转和颜色重涂来恢复树的红黑性质。至于有些书如STL源码剖析有对双旋的描述,其实双旋只是单旋的两次应用,并无新的内容,因此这里就不再介绍了,而且左右旋也是相互对称的,只要理解其中一种旋转就可以了。 三、红黑树

8、插入、删除操作的具体实现

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。