首页 > 代码库 > (5) 红黑树

(5) 红黑树

红黑树本身就是一颗二叉查找树, 因此红黑树的插入操作和二叉查找树的插入操作都是一样的,这个不难.但是红黑树插入节点完成后, 可能会破坏红黑树的特性, 为了保持红黑树的性质, 需要通过一系列操作来保持红黑树的性质.

既然说会破坏红黑树的性质, 那红黑树到底有什么性质呢? 红黑树有五个性质:

性质1. 节点是红色或黑色
性质2. 根是黑色
性质3. 所有叶子都是黑色(叶子是NIL节点)
性质4. 如果一个节点是红的,则它的两个儿子都是黑的
性质5. 从任一节点到其叶子的所有简单路径都包含相同数目的黑色节点。

 

刚才说节点插入后, 可能会破坏红黑树的上面的性质, 为了保持红黑树的性质, 就需要进行一系列的操作.所有的插入情况可以归纳成以下几种case:

  1.如果插入节点的父节点是黑色

    这种情况,不用调整树结构, 不会破坏红黑树性质

  2.插入节点的父节点是红色

      这种情况又需要分成一下几种case讨论:

      (1).叔叔节点是红色

        这种情况不需要对树结构进行改变,只需要改变某些节点的颜色, 就可保持红黑树的性质

      (2)叔叔节点是黑色

        这种情况还需要分:

  • 插入节点的父节点是左子树, 且插入节点是左节点
  • 插入节点的父节点是左子树, 且插入节点是右节点
  • 插入节点的父节点是右子树, 且插入节点是左节点
  • 插入节点的父节点是右子树, 且插入节点是右节点

  所有情况就是这些, 后面对这些情况一一进行分析.

 

参考链接:

http://dongxicheng.org/structure/red-black-tree/

http://blog.csdn.net/yangjun2/article/details/6542321

(5) 红黑树