Изменения

Перейти к: навигация, поиск

Левосторонние красно-чёрные деревья

770 байт добавлено, 16:00, 19 апреля 2018
Удаление максимума
Будем поддерживать инвариант : Для любого узла либо сам узел, либо правый предок узла '''красный'''.
ЗаметимТакже,заметим, что удалять лист легче, чем внутренний узел.===Псевдокод=== '''void''' deleteMax() root = deleteMax(root); root.color = BLACK; '''Node''' deleteMax(Node h) if (isRed(h.left)) //вращаем все 3-вершины вправо h = rotateRight(h); if (h.right == null) //поддерживаем инвариант (h должен быть красным) return null; if (!isRed(h.right) && !isRed(h.right.left)) //заимствуем у брата если необходимо h = moveRedRight(h); h.left = deleteMax(h.left); // опускаемся на один уровень глубже return fixUp(h); //исправление правых красных ссылок и 4-вершин на пути вверх
288
правок

Навигация