资阳市网站建设mvc网站开发视频教程
2026/5/21 13:39:42 网站建设 项目流程
资阳市网站建设,mvc网站开发视频教程,搜索引擎优化是什么工作,网站开发动态1.u存在且为红色 2.u不存在 3.u存在且为黑色 4.2.1情况1#xff1a;变色 c为红#xff0c;p为红#xff0c;g为⿊#xff0c;u存在且为红#xff0c;则将p和u变⿊#xff0c;g变红。在把g当做新的c#xff0c;继续往上更新。 分析#xff1a;因为p和u都是红⾊变色c为红p为红g为⿊u存在且为红则将p和u变⿊g变红。在把g当做新的c继续往上更新。分析因为p和u都是红⾊g是⿊⾊把p和u变⿊左边⼦树路径各增加⼀个⿊⾊结点g再变红相当于保持g所在⼦树的⿊⾊结点的数量不变同时解决了c和p连续红⾊结点的问题需要继续往上更新是因为g是红⾊如果g的⽗亲还是红⾊那么就还需要继续处理如果g的⽗亲是⿊⾊则处理结束 了如果g就是整棵树的根再把g变回⿊⾊。情况1只变⾊不旋转。所以⽆论c是p的左还是右p是g的左还是右都是上⾯的变⾊处理⽅式。这就是第一种情况u存在且为红的处理方式下面我们来看这种情况的示意图在这种情况中我们是不需要旋转的只需要变色即可。当然这只是其中最简单的一种情况所以我们一般看抽象图。和上一篇AVL树一样我们来看一看某些情况来理解为什么我们要看抽象图。这是hb0的情况。这是hb1的情况。这是hb2的情况。这里可以看出相比hb1而言仅仅只多了一个hb就多了非常多种情况所以说我们要要看抽象图。下面我们就实现下变色这种情况的代码在控制循环条件中我们不仅要判断此时parent是否为空还要判断此时的parent是红色才能进入循环如果parent是黑色就不需要更新颜色。这里我们先写parent在grandfather的左边的情况将三种情况写完parent在右边直接复制过去再改些值就可以。里面的代码就是根据我们上面写的变色过程来完成并且在完成一次变色后要继续向上判断。4.2.2情况2单旋变色c为红p为红g为⿊u不存在或者u存在且为⿊u不存在则c⼀定是新增结点u存在且为⿊则 c⼀定不是新增c之前是⿊⾊的是在c的⼦树中插⼊符合情况1变⾊将c从⿊⾊变成红⾊更新上来的。分析p必须变⿊才能解决连续红⾊结点的问题u不存在或者是⿊⾊的这⾥单纯的变⾊⽆法解 决问题需要旋转变⾊。如果p是g的左c是p的左那么以g为旋转点进⾏右单旋再把p变⿊g变红即可。p变成这颗树新的根这样⼦树⿊⾊结点的数量不变没有连续的红⾊结点了且不需要往上更新因为p的⽗亲是⿊⾊还是红⾊或者空都不违反规则。如果p是g的右c是p的右那么以g为旋转点进⾏左单旋再把p变⿊g变红即可。p变成这颗树新的根这样⼦树⿊⾊结点的数量不变没有连续的红⾊结点了且不需要往上更新因为p的⽗亲是⿊⾊还是红⾊或者空都不违反规则。根据上面的规则我们来写情况2的代码右单旋我们在AVL树那一章节已经讲过这里就不过多赘述红黑树中的右单旋与其不同的是不需要判断平衡因子的情况了。剩下的就和AVL树中的一样最后将parent和grandfather变色即可。最后我们来看一下单旋变色的过程。4.2.3情况3双旋变色c为红p为红g为⿊u不存在或者u存在且为⿊u不存在则c⼀定是新增结点u存在且为⿊则 c⼀定不是新增c之前是⿊⾊的是在c的⼦树中插⼊符合情况1变⾊将c从⿊⾊变成红⾊更新上来的。分析p必须变⿊才能解决连续红⾊结点的问题u不存在或者是⿊⾊的这⾥单纯的变⾊⽆法解决问题需要旋转变⾊。如果p是g的左c是p的右那么先以p为旋转点进⾏左单旋再以g为旋转点进⾏右单旋再把c变⿊g变红即可。c变成这颗树新的根这样⼦树⿊⾊结点的数量不变没有连续的红⾊结点了且不需要往上更新因为c的⽗亲是⿊⾊还是红⾊或者空都不违反规则。如果p是g的右c是p的左那么先以p为旋转点进⾏右单旋再以g为旋转点进⾏左单旋再把c变⿊g变红即可。c变成这颗树新的根这样⼦树⿊⾊结点的数量不变没有连续的红⾊结点了且不需要往上更新因为c的⽗亲是⿊⾊还是红⾊或者空都不违反规则。我们根据上面的规则来写情况3的代码经过上面的单旋其实我们也可以看出红黑树的单旋和双旋情况和AVL树是很类似的无非就是需要旋转的条件不同但是一旦要旋转结点的分布是一样的。旋转过后改变cur和grandfather的颜色即可。最后我们看一下双旋变色的过程。下面就是parent在grandfather右边的代码这里要注意的是我们在旋转过后就要break来停止循环否则会出问题的。这里可能有人会有一个疑惑那经过上述的操作后如果根结点被改为红色呢我相信在讲上面的操作中有人疑惑我为什么不判断根结点是否被改变因为我们这里可以暴力解决我不管你中间经过了什么步骤在循环结束时我直接对根结点的_col进行修改将其改为黑色这样就完美解决上面的问题并且简单又简洁。5.红黑树的判断我们在写完了红黑树如何判断它是否是红黑树呢在AVL树的章节我们是通过判断高度差来判断是否是AVL树而在红黑树中显然我们不能这样判断。那么能不能根据颜色来判断呢答案也不能在红黑树中我们要判断的话要根据红黑树的四条规则来判断这样才严谨。我们判断的思路是先找出任意一条路径的黑色节点的个数在遍历其他路径判断黑色节点的个数是否相同并在遍历的途中判断有没有连续的红色结点这样就能兼顾红黑树的四条规则。在上面的代码中我以最左边的路径为标准来检查左右子树是否都为红黑树。其中要注意的就是检查有无两个连续的红色结点时要找其parent原因上面我也写了最后如果左右子树都是红黑树返回true不满足就返回false。最后我们来看一下递归过程的示意图。还有一些像FindInorderSize和Height这些函数和AVL树那篇中的一样这里就不写了。而红黑树的删除和AVL树的删除一样都不在讲解理由也是一样的对于两者而言我们通过插入了解两者是如何控制平衡的即可熟悉控制平衡的过程都有哪些情况。https://www.dongchedi.com/article/7600833157193253401https://www.dongchedi.com/article/7600834099257016856https://www.dongchedi.com/article/7600832447063999000https://www.dongchedi.com/article/7600832867085713945https://www.dongchedi.com/article/7600831262563598873https://www.dongchedi.com/article/7600831402183311897https://www.dongchedi.com/article/7600832061917905470https://www.dongchedi.com/article/7600832733291594264https://www.dongchedi.com/article/7600831880816132632https://www.dongchedi.com/article/7600831372500140568https://www.dongchedi.com/article/7600830983973110297https://www.dongchedi.com/article/7600830989874577944https://www.dongchedi.com/article/7600829992859484697https://www.dongchedi.com/article/7600831200579633688https://www.dongchedi.com/article/7600828893398254104https://www.dongchedi.com/article/7600829947162739225https://www.dongchedi.com/article/7600830440379204158https://www.dongchedi.com/article/7600830705475813950https://www.dongchedi.com/article/7600829156548837913https://www.dongchedi.com/article/7600828482650194457https://www.dongchedi.com/article/7600829257937584702https://www.dongchedi.com/article/7600829728349684248https://www.dongchedi.com/article/7600828048296083993https://www.dongchedi.com/article/7600829419913511486https://www.dongchedi.com/article/7600826526896112152https://www.dongchedi.com/article/7600825958186648089https://www.dongchedi.com/article/7600826072481055257https://www.dongchedi.com/article/7600826004273431065https://www.dongchedi.com/article/7600826285178536472https://www.dongchedi.com/article/7600825958186418713https://www.dongchedi.com/article/7600825908014252569https://www.dongchedi.com/article/7600826379294704190https://www.dongchedi.com/article/7600826004273267225https://www.dongchedi.com/article/7600826379294573118https://www.dongchedi.com/article/7600825908014154265https://www.dongchedi.com/article/7600825816129765913https://www.dongchedi.com/article/7600826257907466814https://www.dongchedi.com/article/7600825708680135193https://www.dongchedi.com/article/7600826257907270206https://www.dongchedi.com/article/7600825908013924889https://www.dongchedi.com/article/7600825653575303705https://www.dongchedi.com/article/7600763089105469977https://www.dongchedi.com/article/7600825816129471001https://www.dongchedi.com/article/7600825816129339929https://www.dongchedi.com/article/7600761478211224089https://www.dongchedi.com/article/7600826159441904190https://www.dongchedi.com/article/7600763029579743806https://www.dongchedi.com/article/7600763312351101465https://www.dongchedi.com/article/7600755747886334488https://www.dongchedi.com/article/7600758147854549566https://www.dongchedi.com/article/7600825603486876185https://www.dongchedi.com/article/7600711725914014233https://www.dongchedi.com/article/7600708729394217534https://www.dongchedi.com/article/7600825816129569305

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询