红黑树
二叉搜索树
- 二叉搜索树的搜索性能随着树结构发生改变
二叉平衡树
- 二叉平衡树的删除和增加操作会导致树结构发生频繁改变
红黑树
-
根节点是黑色
-
叶子结点NIL是黑色
-
红色节点的两个子节点是黑色
-
黑高(一节点任意路径上黑色结点相同)
红黑树插入
* 插入时节点为红色
* 如果树是空树
* 直接将插入节点设为根节点
* 如果插入的结点已经存在
* 无操作
* 如果插入节点的父节点是黑色
* 无操作
* 如果插入节点的父节点是红色
* 如果叔叔节点存在并为红色
* 叔叔和爸爸变成黑色,爷爷变成红色,修复爷爷节点
* 如果叔叔节点不存在或者为黑色:
* LL和RR双红的时候直接以爷爷节点进行右旋和左旋,爸爸变黑,爷爷变红
* RL和LR双红的时候以爸爸节点进行左旋和右旋,并修复爸爸节点
* 每次旋转之后都要重新找到根节点
红黑树删除
- 设置逻辑删除