参考: https://www.jianshu.com/p/e136ec79235c
R-B树(红黑树) = 自平衡的二叉查找树
AVL树(平衡二叉树) = 自平衡的二叉查找树
在线测试: https://www.cs.usfca.edu/~galles/visualization/RedBlack.html
性质:
- 每个节点要么是黑色, 要么是红色
- 根节点是黑色
- 每个叶子节点(NIL)是黑色
- 每个红色结点的两个子结点一定都是黑色
- 任意一结点到每个叶子结点的路径都包含数量相同的黑结点
- a. 如果一个结点存在黑子结点, 那么该结点肯定有两个子结点
自平衡:
删除、插入导致红黑树失衡后, 红黑树会自平衡, 即通过左旋、右旋和变色来实现
左旋: 以某个结点作为支点(旋转结点), 其右子结点变为旋转结点的父结点, 右子结点的左子结点变为旋转结点的右子结点, 左子结点保持不变
右旋: 以某个结点作为支点(旋转结点), 其左子结点变为旋转结点的父结点, 左子结点的右子结点变为旋转结点的左子结点, 右子结点保持不变
变色: 结点的颜色由红变黑或由黑变红
插入
插入操作叫法约定示例图:
插入规则:
注: 4.3.2 更改为 '插入结点是其父结点的左子结点'
删除
删除操作叫法约定示例图:
删除规则: