红黑树的插入与删除 详细整理资料.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
红黑树的插入与删除 详细整理资料

红黑树的插入、删除及旋转原则 Category: Uncategorized — wuxicn @ 12:29 AM 红黑树(Red-Black Tree)的插入和删除操作很繁琐,一不小心就容易弄错,不能靠强制记忆。因此,今天总结一下红黑树插入和删除操作的推导原则,包括旋转的推导原则。/c?m=9d78d513d9d446db4fece4690a62c067691f97634d8b8d5068d4e20ace33ca617f0704a299213156b8492dacad2172465377a09bb9db1b9bfcc17671d11f45954ef9df01659f2fca1cafed0ee6c9ed2fccfd8f8b840b009759127af7a02ee71446b2fbc6554b0245fbf03161fb5b7122952957b630a3a66d30p=8f36da5986cc46aa19be9b7a7f0auser=baidu http://icoder.me/2009/08/25/insert-delete-in-red-black-tree/ blog/item/93b2d17fd6f391320dd7da44.html 如果大家能打开上面的链接,就不用再看了,我整理得不好。。 先是比较简单的插入操作的推导原则: 1. 红黑树的插入和普通搜索二叉树(Binary Search Tree)的插入一样,只是在插入完以后,将新插入的节点标记为红色,然后从该节点开始,向上进行调整颜色。 2. 向上调整颜色进行旋转时,旋转的原则是尽量用1次或者最多2次旋转完成,并且旋转操作不能影响该层以下层次的节点,只能影响其父节点,然后将其父节点(或者叔节点、兄弟节点)作为新的要调整颜色节点,继续向上递推调整。 3. 调整完后注意检查根的颜色是否还是黑色。 删除操作的推导原则:(比较麻烦!) 1. 删除节点z时,先找到z的中根后继节点y,然后将y的数据复制给z(不包括颜色),然后将y删除。这样,删除y的时候,y最多只有一个孩子节点x,将x取代y即可,然后如果y的颜色是黑色,才需要调整颜色。若要调整颜色,从x处开始向上递推的调整颜色。 2. 从x处开始向上调整颜色时也应注意不要影响该层次以下的节点,只能影响x同层或者更高层的节点。调整完后x的父节点(或者叔节点、兄弟节点)作为新的待调节点(新的x),如果new x颜色为红色时,则不用调了,直接结束。 3. 调整是应注意通过标记各层高度(黑高度)来进行推导。 4. 结束后看x是否是红色,如果是,改成黑色。 Remarks: 1. 里面提到的高度是指黑节点个数。 2. 层次也是关于黑节点来说的。 红黑树原理详解前言: ??????? 之所以要写这篇文章,第一个目的是为了各位朋友在查看我写的源代码之前有一个可以理解理论的文章因为红黑树还是有点难的, 如果不想搞懂理论,而直接看代码,那绝对是云里雾里,不知所云。第二个目的是我觉得网上虽然后不少我文章也在讲,但是我就是理解 不上有点困难,在我参考了很多文章之后,认真阅读才慢慢摸透了其中的原理,所以我想用自己的方式来表达,希望有助于各位的朋友理解。 你可以在这里获得配套源代码 红黑树由来: ??????? 他是在1972年 由Rudolf Bayer发明的,他称之为“对称二叉B树”,它现代的名字是Leo J. Guibas和 Robert Sedgewick 于1978 年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找, 插入和删除,这里的n 是树中元素的数目。 红黑树性质: 1. 每个结点或红或黑。 2. 根结点为黑色。 3. 每个叶结点(实际上就是NULL指针)都是黑色的。 4. 如果一个结点是红色的,那么它的周边3个节点都是黑色的。 5. 对于每个结点,从该结点到其所有子孙叶结点的路径中所包含的黑色结点个数都一样。 讨论的前提: 1,我们只讨论往树的左边和从树的左边删除的情况,与之对称的情况一样。 2,假设我们要删除一个元素的方法都是采取删除后继节点,而非前驱节点。 3,NL或全黑表示黑空节点,也可以不用画出。 4,“=”这个符号我们用来表示“变成”的意思。 一. 插入 当红黑树中没有节点的时候,新节点直接涂黑就可以了。 当树中已有节点,我们就将新节点涂红,并且底下挂两个黑空节点。 1.1 新节点的父亲为黑色 这种情况最简单,只接插入将新节点可以了,不会出现红色警戒。 1.2 新节点的父亲为红色 这种情况出现红色警戒,并且通过红色的父亲,我们可以推出一定有一个黑色的父,

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档