О деревьях
Представление с помощью списка ребер и кода Прюфера
Дерево при этом способе задается перечислением пар или троек , если дополнительно нужна нумерация ребер. Характер связей в списке определяется исходя из условий задачи.
Для дерева, изображенного на (рис.11.1), имеем:
.
Алгоритм построения кода Прюфера
Пусть — дерево с множеством вершин . Будем считать, что номер вершины равен . Сопоставим дереву последовательность по следующему правилу, представленному в виде функции: Функция кода Прюфера ( : дерево)
- Пусть обозначает число вершин в , а — целочисленный вектор длины ;
- ;
- Для от до цикл
- ;
- — номер вершины, с которой смежна вершина с номером ;
- ;
- удалить из вершины с номером ;
- возврат .
Пример. Для дерева . код Прюфера имеет вид .
В случае корневого ордерева процедура получения кода Прюфера аналогична. Необходимо только на последнем месте указывать корневую вершину и при распаковке кода исключать номер этой вершины из множества .
Алгоритм раскодирования
Распаковка кода Прюфера осуществляется следующей функцией:
Функция распаковки ( : код)
- Пусть состоит из вершин , таких, что номер вершины равен , где — длина кода плюс 2;
- ;
- Для от до цикл;
- для любого ;
- В добавить ребро, соединяющее вершины с номерами и ;
- ;
- возврат .
Уровневые коды корневых деревьев
Пусть обозначает корневое дерево с лежащим в его основе свободным деревом и корнем . Уровень вершины в — это расстояние от до плюс единица. Уровневый код (обозначение ) — это последовательность целых чисел, полученная выписыванием уровней вершин дерева в постфиксном порядке.
Уровневый код называется каноническим (обозначается ), если он является наибольшим в лексикографическом упорядочении среди всех уровневых кодов, описывающих дерево.
Пример. Для дерева , изображенного на (рис.11. 1), имеем — обычный уровневый код, а канонический уровневый код .