Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы и структуры данных.doc
Скачиваний:
172
Добавлен:
11.03.2015
Размер:
2.05 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

Представление алгебраических выражений бинарными деревьями

Любое алгебраическое выражение, которое содержит переменные, константы, знаки операций и скобки можно представить в виде бинарного дерева, в котором знак операции помещается в корне, первый операнд — в левом поддереве, а второй операнд — в правом. Скобки при этом опускаются. В результате все константы и переменные окажутся в листьях, а знаки операций — во внутренних вершинах. БД алгебраического выражения a + 5 * b * (3 + c * d) представлено на рис.28.

Рис.28. БД алгебраического выражения a+5*b*(3+c*d)

Если выполнить обход БД (рис.28) в прямом порядке, то получим прямую польскую запись (ППЗ) алгебраического выражения:

+ a * * 5 b + 3 * c d

Используя ППЗ можно сформировать БД алгебраического выражения.

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

1. Прочитать элемент ППЗ, создать корень, занести в него значение элемента.

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

Поддеревья строятся точно также, как и БД в целом.

Если выполнить обход БД (см. рис.28) в обратном порядке, то получим обратную польскую запись (ОПЗ) алгебраического выражения:

a 5 b * 3 c d * + * +

Используя ОПЗ можно сформировать БД алгебраического выражения.