红黑树
自平衡二叉搜索树
性质
- 节点不是黑色就是红色
- 根节点是黑色
- 所有有叶子节点为空节点并且为黑色
- 一个节点为红色则两个子节点为黑色不能有相邻的两个红节点
- 从给定节点触出发到其后代节点,所有路径包含相同数量的黑色节点
插入操作
插入节点必须为红色,插入节点为N、父节点为P、祖父节点为G、父节点兄弟节点为U
情况一
插入的到空树中,直接将红色变为黑色即可满足性质2
情况二
如果新节点的父节点为P为黑色,性质四与性质5符合 所以不需要改变
情况三
P为红色U也是红色G为黑色
步骤 将P和U变换为黑色,并将G变为红色
如果N的祖父节点G的父节点也可能是红色的,可以递归来处理颜色,如果递归调整颜色到了根节点,那就需要旋转了
情况四
P是红色,U为黑色,祖父节点G为黑色,N并且作为左孩子
对祖父节点G进行右旋转,并将P节点变为黑色,G节点变为红色。
情况五
P为红色,U和G 为黑色,并且N为右孩子
以P为根先进行左旋转,将P作为新插入的红色节点进行考虑,N变为黑色,祖父节点G变为红色,在一祖父节点G为中心进行右旋转。