На этом шаге мы рассмотрим еще один однократный поворот.
Этот алгоритм ничем не отличается от рассмотренного на предыдущем шаге, только поворот осуществляется в другую сторону.
Приведем текст алгоритма:
p1 = (*p).Right;
(*p).Right = (*p1).Left;
(*p1).Left = p;
(*p).bal = 0; p = p1;
Рассмотрим его использование на конкретном примере.
Пусть дано следующее дерево:

Рис.1. Исходное дерево
Иллюстрируем алгоритм с помощью схем "до и после" Д.Кнута:
p1 = (*p).Right;

Рис.2. Сохранение адреса нового корня дерева
(*p).Right = (*p1).Left;

Рис.3. Переприкрепление
(*p1).Left = p;

Рис.4. Определение левого поддерева "нового" корня
(*p).bal = 0; p = p1;

Рис.5. Установка начальных значений
В результате получилось следующее сбалансированное дерево:

Рис.6. Результат балансировки
Проиллюстрируем эту несбалансированность и ее устранение следующими рисунками:

Рис.7. Несбалансированность (отмечен узел, вызвавший несбалансированность)

Рис.8. Несбалансированность устранена (отмечен узел, вызвавший несбалансированность)
Со следующего шага мы начнем рассматривать двухкратные повороты.