红黑树
什么是红黑树
红黑树
:是一种可以保持平衡二叉搜索树。一般的二叉搜索树在按照某些特定的插入节点的顺序下,会造成树不平衡的情况,进而影响搜索的效率。红黑树
可以解决这一问题。
红黑树
的每个节点上都有存储位表示节点的颜色
红黑树的特性
- 每一个节点或者是黑色,或者是红色。
- 根节点的颜色一定是黑色。
- 叶子节点的颜色一定是黑色。叶子节点是指NIL节点或NULL节点。
- 一条路径上不能出现连续的红色节点。(或父节点为红色,子节点一定不为红色)。
- 从一个节点到其叶子节点,包含的黑色节点数相同。
插入节点和删除结点存在的情况和变换操作
以插入节点为例,删除节点的操作类似
节点的初始化就为红色,插入树后再颜色调整和树的变换
情况一:根节点为NULL
- 因为根节点为null则直接插入,并且根节点指针指向这个节点。
- 因为为跟节点那么得修改颜色: 红色 —> 黑色。
情况二:父节点为黑色
- 直接插入节点不需要改变颜色。
情况三:父节点和叔叔节点为红色,祖父节点为黑色
- 找到要插入的位置
- 父节点(
P
)和叔叔节点(U
):红色 —> 黑色 。 - 祖父节点(
U
): 黑色 —> 红色。
情况四: 父节点为红,叔叔节点为黑,且N
节点为左子节点
- 找到要插入的位置
- 父节点
P
: 红色 —> 黑色, 叔叔节点U
: 黑色 —> 黑色,祖父节点(U
): 黑色 —> 红色。 - 再以父节点
P
进行右旋转
情况五:父节点为红,叔叔节点为黑,且N
节点为右孩子节点
- 找到要插入的位置
- 颜色变换:
N
本身:红色 —> 黑色. - 以父节点
P
为根左旋转,再以祖节点G
为根右旋转
代码展示
知道红黑树规则了,但我就不写代码,埃,就是玩。
偷个懒 ,下张写,骗个浏览量,哈哈。