红黑树

红黑树是满足如下 5 个性质的二叉搜索树:

  1. 每个节点要么是红色的,要么是黑色的
  2. 根节点是黑色的
  3. 叶子节点都是空的黑节点(也叫黑哨兵),如果某个节点的左孩子节点或右孩子节点为空,那么空的孩子节点也应该是黑哨兵
  4. 如果某个节点是红色的,那么其孩子必须是黑色的,即不存在连续的红节点
  5. 从任意节点到其所有子孙叶子节点的路径上的黑节点的数量相同

AVLTree 和 RBTree 的对比

AVLTree 追求完美的平衡,所以更新树时,需要频繁地旋转。

RBTree 追求近似的平衡,所以更新树时,旋转的频率比 AVLTree 低,因此统计性能更好。

根据 RBTree 的第 4 个和第 5 个性质,可以推断出,在 RBTree 中,某个节点的较高的子树的高度最多是较低的子树的高度 2 倍。


红黑树的插入

可以参考这篇文档,但是该文档只介绍了插入节点的父节点是其祖父的左孩子的情况,因此可以结合 Python 实现代码中的注释一起阅读。


红黑树的删除

可以参考这篇文档,但是该文档只介绍了待删除节点有右子树的情况,因此可以结合 Python 实现代码中的注释一起阅读。


Python 实现

tim-chow 的 Github