红黑树

如果一颗二叉查找树满足下面的红黑性质,则为一颗红黑树:

  1 每个节点或是红的,或是黑的

  2 根节点是黑的

  3 每个叶节点是黑的

  4 如果一个节点是红的,则它的两个儿子都是黑的

  5 对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点

 

插入:

  向一颗含n个节点的红黑树中插入一个新节点的操作可在O(lgn)时间内完成。

    1 将一个节点Z插入树T内,就好像T是一棵普通的二叉查找树一样

    2 将Z着为红色

    3 为保证红黑性质能继续保持,调用一个辅助程序来对节点重新着色并旋转

 

在插入过程中,那些红黑性质可能会被破坏:

  性质1:不会

  性质2:有可能,因为Z为红色,如果Z为根节点则破坏了性质2

  性质3:不会,因为新插入的节点的子女都是哨兵nil[T]

  性质4:很有可能,如果Z的父节点是红色

  性质5:不会,因为Z本身是具有哨兵子女的红节点

 

删除:

  开始和二叉查找树的删除方式一样,然后调用辅助程序保证红黑树的性质

  如果被删除的节点是黑色,则调用辅助程序,

  如果被删除的节点是红色,则当节点被删除后,红黑性质仍然得以保持,理由:

    1 树中各节点的黑高度都没有变化

    2 不存在两个相邻的红色节点

    3 如果y为红的,就不可能是根,所以根仍然是黑色的

  传递给辅助程序的节点是被删除节点的两个子节点中的一个;如果只有一个不是哨兵的节点,选不是哨兵的那个节点;没有孩子,选哨兵

posted @ 2013-11-14 06:51  褐色键盘  阅读(129)  评论(0)    收藏  举报