1 / 14
文档名称:

STL源码剖析.doc

格式:doc   大小:78KB   页数:14页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

STL源码剖析.doc

上传人:zhufutaobao 2019/12/15 文件大小:78 KB

下载得到文件列表

STL源码剖析.doc

文档介绍

文档介绍:STL源码剖析STL源码剖析---红黑树原理详解下算法导论书上给出的红黑树的性质如下,跟STL源码剖析书上面的4条性质大同小异。1、每个结点或是红色的,或是黑色的2、根节点是黑色的3、每个叶结点(NIL)是黑色的4、如果一个节点是红色的,则它的两个儿子都是黑色的。5、对于每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑色结点。从红黑树上删除一个节点,可以先用普通二叉搜索树的方法,将节点从红黑树上删除掉,然后再将被破坏的红黑性质进行恢复。我们回忆一下普通二叉树的节点删除方法:Z指向需要删除的节点,Y指向实质结构上被删除的结点,如果Z节点只有一个子节点或没有子节点,那么Y就是指向Z指向的节点。如果Z节点有两个子节点,那么Y指向Z节点的后继节点(其实前趋也是一样的),而Z的后继节点绝对不可能有左子树。因此,仅从结构来看,二叉树上实质被删除的节点最多只可能有一个子树。现在我们来看红黑性质的恢复过程:如果Y指向的节点是个红色节点,那么直接删除掉Y以后,红黑性质不会被破坏。操作结束。如果Y指向的节点是个黑色节点,那么就有几条红黑性质可能受到破坏了。首先是包含Y节点的所有路径,黑高度都减少了一(第,条被破坏)。其次,如果Y的有红色子节点,Y又有红色的父节点,那么Y被删除后,就出现了两个相邻的红色节点(第,条被破坏)。最后,如果Y指向的是根节点,而Y的子节点又是红色的,那么Y被删除后,根节点就变成红色的了(第,条被破坏)。其中,第,条被破坏是让我们比较难受的。因为这影响到了全局。这样动作就太大太复杂了。而且在这个条件下,进行其它红黑性质的恢复也很困难。所以我们首先解决这个问题:如果不改变含Y路径的黑高度,那么树的其它部分的黑高度就必须做出相应的变化来适应它。所以,我们想办法恢复原来含Y节点的路径的黑高度。做法就是:无条件的把Y节点的黑色,推到它的子节点X上去。(X可能是NIL节点)。这样,X就可能具有双重黑色,或同时具有红黑两色,也就是第,条性质被破坏了。但第,条性质是比较容易恢复的:一、如果X是同时具有红黑两色,那么好办,直接把X涂成黑色,就行了。而且这样把所有问题都解决了。因为将X变为黑色,,、,两条如果有问题的话也会得到恢复,算法结束。二、如果X是双黑色,那么我们希望把这种情况向上推一直推到根节点(调整树结构和颜色,X的指向新的双黑色节点,X不断向上移动),让根节点具双黑色,这时,直接把X的一层黑色去掉就行了(因为根节点被包含在所有的路径上,所以这样做所有路径同时黑高减少一,不会破坏红黑特征)。下面就具体地分析如何恢复1、,、,三个可能被破坏的红黑特性:我们知道,如果X指向的节点是有红黑两色,或是X是根节点时,只需要简单的对X进行一些改变就行了。要对除X节点外的其它节点进行操作时,必定是这样的情况:X节点是双层黑色,且X有父节点P。由知可知,X必然有兄弟节点W,而且这个W节点必定有两个子节点。(因为这是原树满足红黑条件要求而自然具备的。X为双黑色,那么P的另一个子节点以下一定要有至少两层的节点,否则黑色高度不可能和X路径一致)。所以我们就分析这些节点之间如何变形,把问题限制在比较小的范围内解决。另一个前提是:X在一开始,肯定是树底的叶节点或是NIL节点,所以在递归向上的过程中,每一步都保证下一步进行时,至少X的子树是满足红黑特性的。因此子树的情况就可以认为是已经正确的了,这样,分析就只限制在X节点,X的父节点P和X的兄弟节点W,以及W的两个子节点。这些个节点中。下面仅仅考虑X原本是黑色的情况即可。在这种情况下,X此时应该具有双重黑色,算法的过程就是将这多出的一重黑色向上移动,直到遇到红节点或者根节点。接着往下分析,会遇到4种情况,实际上是8种,因为其中4种是相互对称的,这可以通过判断X是其父节点的右孩子还是左孩子来区分。下面我们以X是其父节点的左孩子的情况来分析这4种情况,实际上接下来的调整过程,就是要想方设法将经过X的所有路径上的黑色节点个数增加1。具体分为以下四种情况:(下面针对x是左儿子的情况讨论,右儿子对称)Case1:X的兄弟W是红色(想办法将其变为黑色)由于W是红色的,因此其儿子节点和父节点必为黑色,只要将W和其父节点的颜色对换,在对父节点进行一次左旋转,便将W的左子节点放到了X的兄弟节点上,X的兄弟节点变成了黑色,且红黑性质不变。但还不算完,只是暂时将情况1转变成了下面的情况2或3或4。Case2:X的兄弟节点W是黑色的,而且W的两个子节点都是黑色的。此时可以将X的一重黑色和W的黑色同时去掉,而转加给他们的父节点上,这是X就指向它的父节点了,因此此时父节点具有双重颜色了。这一重黑色节点上移。如果父节点原来是红色的,现在又加一层黑色,那么X现在指向的这个节点就是红黑两色的,直接把X(也就是父节点)着为黑色。问题就已

最近更新

吸顶灯战略市场规划报告 87页

区块链电商行业报告 27页

众筹融资商业计划书 33页

发展中国家和发达国家(2) 39页

低压液相层析色谱技术 41页

体育装备行业报告 28页

乙酸乙酯行业报告 27页

上海养老机构可行性报告 33页

《服装的变化作业设计方案-2023-2024学年科学.. 5页

《太阳系作业设计方案-2023-2024学年科学青岛.. 5页

中国干细胞医疗行业报告 32页

水生植物对芘吸收机理的研究的开题报告 2页

水源区河流水资源系统对跨流域调水的响应研究.. 2页

水杨酸包结工艺和机理及其包结物的性能研究的.. 2页

水产加工品中胆固醇氧化物含量检测及形成机理.. 2页

户外广告可行性方案 27页

氟乐灵与秋水仙素诱导萝卜同源四倍体及小孢子.. 2页

气化的研究的开题报告 2页

餐饮合作经营可行性方案 37页

雨水管网可行性方案 32页

民事诉讼缺席判决制度研究的开题报告 2页

比较超声三维重建和核磁共振对前置胎盘合并胎.. 2页

菜品主辅料配比表 6页

七年级下血液测试 1页

CCI和DPO两个指标融合通达信指标公式源码 1页

苏教版数学四年级下册平移旋转和轴对称练习题.. 2页

专业版收养协议书电子版合同范文下载 1页

元亨利贞网奇门遁甲在线排盘系统 2页

基于plc的多路称重系统设计毕业论文 49页

奥沙利铂联合卡培他滨治疗胃癌术后淋巴转移的.. 3页