红黑树
如果一颗二叉查找树满足下面的红黑性质,则为一颗红黑树:
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为红的,就不可能是根,所以根仍然是黑色的
传递给辅助程序的节点是被删除节点的两个子节点中的一个;如果只有一个不是哨兵的节点,选不是哨兵的那个节点;没有孩子,选哨兵

浙公网安备 33010602011771号