红黑树(Red-black tree)是一种平衡二叉查找树,具有以下性质:
- 每个节点或是红色的,或是黑色的。
- 根节点是黑色的。
- 每个叶子节点都是黑色的空节点(NIL节点,叶子节点不存储数据)。
- 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
- 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
这些性质能确保红黑树在最坏情况下仍然是平衡的,其时间复杂度为 O(log n)。
红黑树支持常用的树操作,如插入、删除、查找。插入和删除操作会破坏平衡性,但可以通过旋转等操作来保证红黑树的性质不变。
下面是红黑树的 Python 代码实现:
class Node:
def __init__(self, key, color='red', left=None, right=None, parent=None):
self.key = key
self.color = color
self.left = left
self.right = right
self.parent = parent
class RedBlackTree:
def __init__(self):
self.nil = Node(None, color='black')
self.root = self.nil
def left_rotate(self, x):
y = x.right
x.right = y.left
if y.left != self.nil:
y.left.parent = x
y.parent = x.parent
if x.parent == self.nil: