Алгоритм формирования бинарного дерева минимальной высоты

Если в упорядоченной последовательности есть элементы, то создать корень и записать в него средний элемент последовательности, для первой части элементов последовательности (от первого до среднего элемента) построить левое поддерево, а для второй (от среднего до последнего) — правое поддерево.

БД, в котором относительно каждой вершины дерева количество вершин в левом и правом поддеревьях может отличаться максимум на единицу, называется идеально сбалансированным.

Сформировать идеально сбалансированное БД для заданной упорядоченной по возрастанию последовательности неповторяющихся элементов можно с помощью итеративного алгоритма. Средний элемент последовательности будет корнем БД и он разбивает последовательность на две части — левую и правую. Левое поддерево корня строится из левой части последовательности, а правое — из правой части точно также, как и БД для всей последовательности. Поэтому границы вновь образующихся последовательностей и адрес корня будем хранить в стеке.

Итеративный алгоритм формирования сбалансированного бинарного дерева

1. Создать корень, занести в него значение среднего элемента последовательности. Адрес корня, границы правой и левой части последовательности занести в стек.

2. Пока стек не пуст, извлечь из стека границы левой, правой части последовательности и адрес корня.

Если левой части нет, то нет левого поддерева для корня, иначе создать корень левого поддерева (левого сына), записать в него значение среднего элемента левой части, адрес левого сына и границы левой и правой части занести в стек.

Если правой части нет, то нет правого поддерева для корня, иначе создать корень правого поддерева (правого сына), записать в него значение среднего элемента правой части, адрес правого сына и границы левой и правой части занести в стек.

3. Конец алгоритма.