《算法导论》CLRS算法C++实现(十一)P163 红黑树

第十三章 红黑树

首先说一下本章有一个地方的图有误,P168页的图,正确的图如下(case3有误,中文版):

 

在Linux内核和STL中,都大量使用了红黑树这种数据结构,原因是红黑树的搜索、插入和删除效率都很高。

红黑树是一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是RED(红色)或BLACK(黑色)。

一棵红黑树有如下性质: 

(1)每个结点要么是红的,要么是黑的。
(2)根结点是黑的。
(3)每个叶结点,即空结点(NIL)是黑的。
(4)如果一个结点是红的,那么它的俩个儿子都是黑的。
(5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。

树中每个结点有五个域:color,key,left,right和p。一棵有n个内结点的红黑树的高度至多为2lg(n+1)。

红黑树的操作:

1、旋转

当在红黑树上进行插入或删除操作时,树的红黑性质将被破坏。为了保持这些性质,就要改变树中某些结点的颜色及指针的结构。其中指针结构的修改是通过旋转来完成的。旋转是一种能保持持树中结点的中缀次序的局部操作。下图是两种旋转方法,左旋和右旋。

2、插入

情况1:如下图所示,X为新插入的结点,将其涂为红色。P为X的父结点,也为红色。G是X的祖父结点,S是X的叔父结点,它们都为黑色。这时X、P和G成一直线排列,此种情况的处理方式比较简单,只要采用一个单旋转操作,并进行适当的颜色调整即可。首先进行一个右单旋转,然后修改G的颜色。

情况2:如下图所示,X为新插入的结点,将其涂为红色。P为X的父结点,也为红色。G是X的祖父结点,S是X的叔父结点,它们都为黑色。这是X、P和G成一折线排列,此种情况的处理方式是采用一个双旋转操作,并进行适当的颜色调整即可。首先进行一个先左后右的双旋转,旋转过程中修改X和G的颜色。

情况3:情况1和情况2都相对简单,但是如果新插入结点X的叔父结点S为红色,有可能无论如何旋转总是会出现“红-红结点”的情况。这时采用逐层上升的调整和着色。

如下图所示的情况,仍然比较简单,一个右单旋转就解决了问题。

 

 下图所示的情况则复杂一些。图a为插入结点16的过程。因为16及其父结点17都是红的,帮违反了性质3。又因为16的叔父结点22也是红的,则属于情况3。各结点被重新着色,指针沿树上升,所得的树如下图b所示。如此,结点21及其父亲结点又都为红色,但结点21的叔父结点30是黑的。由于21是15的右孩子,故可应用情况2进行处理,在执行一次左旋转后,所得结果树如图c。执行一次右旋后得图d中的树。它是一棵合法的红黑树,插入操作完成。

 

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值