Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR17.doc
Скачиваний:
31
Добавлен:
10.03.2016
Размер:
203.26 Кб
Скачать

Порядок узлов

Если в определении дерева имеет значение порядок поддеревьевT1, T2, ... Tm, то дерево является упорядоченным.

Сыновья узла обычно упорядочиваются слева направо. Поэтому деревья, приведенные на рисунке, являются различными.

Если порядок сыновей игнорируется, то такое дерево называется неупорядоченным. Далее будем неявно предполагать, что все рассматриваемые деревья являются упорядоченными, если явно не указано обратное.

Обходы дерева

Существует несколько способов обхода всех узлов дерева. Три наиболее часто используемых способа обхода называются прямой, обратный и симметричный обходы. Все три способа можно рекурсивно определить следующим образом:

  • Если дерево T является нулевым деревом, то в список обхода записывается пустая строка;

  • Если дерево T состоит из одного узла, то в список обхода записывается этот узел;

  • Пусть дерево T имеет корень n и поддеревья T1, T2, ... Tm, как показано на рисунке

Тогда для различных способов обхода имеем следующее:

  1. Прямой обход. Сначала посещается корень n, затем в прямом порядке узлы поддерева T1, далее все узлы поддерева T2 и т.д. Последними посещаются в прямом порядке узлы поддерева Tm.

  2. Обратный обход. Сначала посещаются в обратном порядке все узлы поддерева T1, затем в обратном порядке узлы поддеревьев T2 … Tm, последним посещается корень n.

  3. Симметричный обход. Сначала в симметричном порядке посещаются все узлы поддерева T1, затем корень n, после чего в симметричном порядке все узлы поддеревьев T2 … Tm.

Рассмотрим пример всех способов обхода дерева, изображенного на рисунке:

Порядок узлов данного дерева в случаепрямого обхода будет следующим: 1 2 3 5 8 9 6 10 4 7.

Обратный обход этого же дерева даст нам следующий порядок узлов: 2 8 9 5 10 6 3 7 4 1.

При симметричном обходе мы получим следующую последовательность узлов: 2 1 8 5 9 3 10 6 7 4.

Помеченные деревья и деревья выражений

Часто бывает полезным сопоставить каждому узлу дерева метку или значение. Дерево, у которого узлам сопоставлены метки, называется помеченным деревом. Метка узла – это значение, которое «хранится» в узле. Полезна следующая аналогия: дерево – список, узел – позиция, метка – элемент.

Рассмотрим пример дерева с метками, представляющее арифметическое выражение (a+b)*(a+c), где n1, n2, …, n7 – имена узлов, а метки проставлены рядом с соответствующими узлами. Правила соответствия меток деревьев элементам выражений следующие:

    • Метка каждого листа соответствует операнду и содержит его значение;

    • Метка каждого внутреннего (родительского) узла соответствует оператору.

Часто при обходе деревьев составляется список не имен узлов, а их меток. В случае дерева выражений при прямом обходе получим известнуюпрефиксную форму записи выражения, где оператор предшествует обоим операндам. В нашем примере мы получим префиксное выражение вида: *+ab+ac.

Обратный обход меток дерева дает постфиксное представление выражения (польскую запись). Обратный обход нашего дерева даст нам следующую запись выражения: ab+ac+*.

Следует учесть, что префиксная и постфиксная запись выражения не требует скобок.

При симметричном обходе мы получим обычную инфиксную запись выражения: a+b * a+c. Правда для инфиксной записи выражений характерно заключение в скобки: (a+b)*(a+c).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]