Есть версия в Введение в алгоритмы Томаса Х. Кормена, Чарльза Э. Лизерсона, Рональда Л. Ривеста, Клиффорда Стейна.
Псевдокод доступен в Интернете по адресу Google books (стр. 270).
Как указано в комментариях, подход копирования данных в узел z
вместо замены z
на y
в строке 14/15 не оптимален, особенно если у вас есть указатели на узлы где-то еще , Таким образом, строка 13-16 может быть вместо:
do_fixup = y.color == BLACK
if y is not z:
replace_parent(tree, y, z)
y.left = z.left
y.left.parent = y
y.right = z.right
y.right.parent = y
y.color = z.color
if do_fixup:
...
Где replace_parent
определяется как (это можно использовать и для строки 7-12):
def replace_parent(tree, a, b):
a.parent = b.parent
if not b.parent:
tree.root = a
else:
if b is b.parent.left:
b.parent.left = a
else:
b.parent.right = a