- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
红黑树的简介论文
红黑树的简介
红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,他称之为对称二叉B树,它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。
红黑树(Red-Black Tree)是二叉搜索树(Binary Search Tree)的一种改进。我们知道二叉搜索树在最坏的情况下可能会变成一个链表(当所有节点按从小到大的顺序依次插入后)。而红黑树在每一次插入或删除节点 之后都会花O(log N)的时间来对树的结构作修改,以保持树的平衡。也就是说,红黑树的查找方法与二叉搜索树完全一样;插入和删除节点的的方法前半部分节与二叉搜索树完全一 样,而后半部分添加了一些修改树的结构的操作。
红黑树的性质
红黑树的每个节点上的属性除了有一个key、3个指针:parent、lchild、rchild以外,还多了一个属性:color。它只能是两种颜色:红或黑。而红黑树除了具有二叉搜索树的所有性质之外,还具有以下4点性质:
根节点是黑色的。
空节点是黑色的(红黑树中,根节点的parent以及所有叶节点lchild、rchild都不指向NULL,而是指向一个定义好的空节点)。
红色节点的父、左子、右子节点都是黑色。
在任何一棵子树中,每一条从根节点向下走到空节点的路径上包含的黑色节点数量都相同。
红黑树的使用
如下图就是一棵红黑树:
3-0-1 红黑树
根据红黑树的性质,就可以保证整棵树的平衡,也就等于保证了搜索的时间为O(log N)。 但是在插入、删除节点后,就有可能破坏了红黑树的性质。所以我们要做一些操作来把整棵树修补好:
首先,是节点的Left-Rotate和Right-Rotate操作。所谓Left-Rotate(x)就是把节点x 向左下方 向移动一格,然后让x原来的右子节点代替它的位置。而Right-Rotate当然就是把Left-Rotate左、右互反一下。如下图:
3-0-2 节点LeftLeft-Rotate和Right-Rotate操作
注意:Left-Rotate(x)后,x的右子树变成了原来y的左子树,Right-Rotate反之。这样一次变换后,仍然满足二叉搜索树的性质。在红黑树的插入、删除中,要用到很多Left-Rotate和Right-Rotate操作。
3.1 插入
插入首先是按部就班二叉搜索树的插入步骤,把新节点z插入到某一个叶节点的位置上。 接下来把z的颜色设成红色。根据红黑树的性质,从根节点向下到空节点的每一条路径上的黑色节点数要相同。如果新插入的是黑色节点,那么它所在 的路径上就多出了一个黑色的节点了。所以新插入的节点一定要设成红色。但是这样可能又有一个矛盾:如果z的父节点也是红色,怎么办,前面说过红色节点的子 节点必须是黑色。因此我们要执行下面一个迭代的过程,称为Insert-Fixup,来修补这棵红黑树。
在Insert-Fixup中,每一次迭代的开始,指针z一定都指向一个红色的节点。如果z-parent是黑色,那我们就大功 告成了;如果z-parent是红色,显然这就违返了红黑的树性质,那么我们要想办法把z或者z-parent变成黑色,但这要建立在不 破坏红黑树的其他性质的基础上。
这里再引入两个指针:grandfather,指向z-parent-parent,也就是z的爷爷(显然由于 z-parent为红色,grandfather一定是黑色);uncle,指向grandfather除了z-parent之外的另一 个子节点,也就是z的父亲的兄弟,所以叫uncle。
(我们这里都假设z-parent是grandfather的左子节点,而uncle是grandfather的右子节点。如果遇到的实际情况不是这样,那也只要把所有操作中的左、右互反就可以了。)
在每一次迭代中,我们可能遇到以下三种情况。
Case 1. uncle也是红色。这时只要把z-parent和uncle都设成黑色,并把grandfather设成红色。这样仍然确保了每一条路径上的黑色节点数不变。然后把z指向grandfather,并开始新一轮的迭代。如下图:
3-1-1 插入时uncle是红色的情况
Case 2. uncle是黑色,并且z是z-parent的右子节点。这时我们只要把z指向z-parent,然后做一次Left-Rotate(z)。就可以把情况转化成Case 3。
Case 3. uncle是黑色,并
您可能关注的文档
最近下载
- 人教版地理必修一教材解读(2019年版).pptx VIP
- 初中音乐教学课件走进京剧.ppt VIP
- 2022年土地登记代理人题库700道及参考答案【培优b卷】.docx
- 药剂职业生涯规划目标.pptx VIP
- 2025年SpaceX火箭推进系统技术创新及市场影响报告.docx VIP
- (新版)油品计量工(技师)职业鉴定考试题库资料(浓缩400题).pdf VIP
- 全国大学生职业规划大赛《法学》专业生涯发展展示PPT【最新版】.pptx
- (精选)实践是认识的基础教学课件.ppt VIP
- 2023年市政工程质量检测见证取样员手册培训资料.doc VIP
- 【MOOC】微观经济学-浙江大学 中国大学慕课MOOC答案.docx VIP
原创力文档


文档评论(0)