码迷,mamicode.com
首页 > 其他好文 > 详细

红黑树总结

时间:2015-03-09 15:50:15      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

1.红黑树的性质。

  1)根节点是黑色。

  2)所有节点要么是红色,要么是黑色。

  3)红节点的孩子必然是黑色。

  4)都用叶子节点结尾,且叶子节点是哨兵,都是黑色,没有实际的key值。

  5)每一个节点的所有黑高都是相等的,黑高即是从此节点开始,到每一个哨兵所经历的黑节点的个数。

2.红黑树的插入。

   1)插入。与普通二叉查找树没有区别。

   2)插入修复。(为了方便,在插入的节点通常都先设为红节点)

      case 1:如果插入节点z的父亲p是黑色,那么并不影响红黑色树的任何性质。

      case 2:如果插入节点z的父亲p是红色,影响了性质3,这时p的父亲g必然是黑色,那么p的父亲的另外一个孩子u(即是p的叔父节点)的颜色有以下几种情况。

              case 2.1:u是红色的,只需要将u,p变成黑色,他们的父亲g变成红色,然后把g赋值给z进行下一轮修复。

              case 2.2:u是黑色的,这时看z与p是否都是同侧(即都是左孩子,还是都是右孩子),如果是同侧,可绕g旋转,并且把更改p,g的颜色即可恢复。

              case 2.3:u是黑色的,,这时看z与p是否都是同侧(即都是左孩子,还是都是右孩子),如果是异侧,可绕p旋转,并且把z改为旋转后的孩子(即旋转前的父亲),然后变成情况2.2,进行修复。

3.红黑树的删除。

     1)删除。正常删除即可,注意记录删除点的孩子移动行踪x,及其删除点z的原始颜色,如果是红色,不影响红黑树的任何性质,否则要进行删除修复。

     2)删除修复。(如果修复过程中根节点变红,最终一定要把他变黑)

            case 1:如果x是红色,只需要将变成黑色即可恢复性质。

            case 2:如果x是黑色,x的兄弟w是红色,那么x的父亲p是黑色,把他变成黑色,并且绕P旋转就可以转换成x的兄弟是w是黑色即case 3。

            case 3:如果x是黑色,x的兄弟w是黑色,如果w的其同侧孩子是黑色,异侧孩子也是黑色,把w变成红色,把x与w的父亲作为新的x进行下一轮修复。

            case 4:如果x是黑色,x的兄弟w是黑色,如果w的其同侧孩子是黑色,异侧孩子是红色,绕w旋转可以转换成 case 5;

            case 5:如果x是黑色,x的兄弟w是黑色,如果w的其同侧孩子是红色,绕x与w的父亲旋转并且相应的变色即可修复。

4.代码

红黑树总结

标签:

原文地址:http://www.cnblogs.com/ilovewuzhaoxia/p/4323501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!