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