Введение в деревья

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

Дерево и его свойства

Definition- Дерево - это связный ациклический неориентированный граф. Между каждой парой вершин в $ G $ существует единственный путь. Дерево с числом вершин N содержит $ (N-1) $ ребер. Вершина, имеющая нулевую степень, называется корнем дерева. Вершина, имеющая 1 степень, называется листовым узлом дерева, а степень внутреннего узла не менее 2.

Example - Ниже приведен пример дерева -

Центры и би-центры дерева

Центр дерева - это вершина с минимальным эксцентриситетом. Эксцентриситет вершины $ X $ в дереве $ G $ - это максимальное расстояние между вершиной $ X $ и любой другой вершиной дерева. Максимальный эксцентриситет - это диаметр дерева. Если дерево имеет только один центр, оно называется центральным деревом, а если дерево имеет только более одного центра, оно называется двухцентровым деревом. Каждое дерево может быть центральным или двухцентровым.

Алгоритм поиска центров и двухцентров дерева

Step 1 - Удалите все вершины степени 1 из данного дерева, а также удалите их инцидентные ребра.

Step 2- Повторяйте шаг 1 до тех пор, пока не останется одна или две вершины, соединенные ребром. Если осталась одна вершина, то это центр дерева, а если две вершины, соединенные ребром, остались, то это би-центр дерева.

Problem 1

Найдите центр / би-центр следующего дерева -

Solution

Сначала мы удалим все вершины степени 1, а также удалим их инцидентные ребра и получим следующее дерево:

Опять же, мы удалим все вершины степени 1, а также удалим их инцидентные ребра и получим следующее дерево:

Наконец, у нас есть единственная вершина «c», и мы останавливаем алгоритм. Поскольку существует единственная вершина, это дерево имеет один центр 'c', и дерево является центральным деревом.

Problem 2

Найдите центр / би-центр следующего дерева -

Solution

Сначала мы удалим все вершины степени 1, а также удалим их инцидентные ребра и получим следующее дерево:

Опять же, мы удалим все вершины степени 1, а также удалим их инцидентные ребра и получим следующее дерево:

Наконец, у нас остались две вершины «c» и «d», поэтому мы останавливаем алгоритм. Поскольку две вершины, соединенные ребром, остались, это дерево имеет бицентр 'cd' и дерево является бицентральным.

Маркированные деревья

Definition- Размеченное дерево - это дерево, вершинам которого присвоены уникальные номера от 1 до n. Мы можем подсчитать такие деревья для малых значений n вручную, чтобы вывести общую формулу. Количество помеченных деревьев с числом вершин n равно $ n ^ {n-2} $. Два помеченных дерева изоморфны, если их графы изоморфны и соответствующие точки двух деревьев имеют одинаковые метки.

пример

Немаркированные деревья

Definition- Дерево без меток - это дерево, вершинам которого не присвоены номера. Количество помеченных деревьев с числом вершин n равно $ \ frac {(2n)!} {(N + 1)! N! } $ (n- е каталонское число)

пример

Укоренившееся дерево

Корневое дерево $ G $ - это связный ациклический граф со специальным узлом, который называется корнем дерева, и каждое ребро прямо или косвенно происходит от корня. Упорядоченное корневое дерево - это корневое дерево, в котором упорядочены дочерние элементы каждой внутренней вершины. Если каждая внутренняя вершина корневого дерева имеет не более m дочерних элементов, это называется m-арным деревом. Если каждая внутренняя вершина корневого дерева имеет ровно m детей, это называется полным m-арным деревом. Если $ m = 2 $, корневое дерево называется двоичным деревом.

Дерево двоичного поиска

Дерево двоичного поиска - это двоичное дерево, которое удовлетворяет следующему свойству:

  • $ X $ в левом поддереве вершины $ V, Value (X) \ le Value (V) $
  • $ Y $ в правом поддереве вершины $ V, Value (Y) \ ge Value (V) $

Итак, значение всех вершин левого поддерева внутреннего узла $ V $ меньше или равно $ V $, а значение всех вершин правого поддерева внутреннего узла $ V $ больше или равны $ V $. Количество ссылок от корневого узла к самому глубокому узлу - это высота двоичного дерева поиска.

пример

Алгоритм поиска ключа в BST

BST_Search(x, k) 
if ( x = NIL or k = Value[x] ) 
   return x; 
if ( k < Value[x]) 
   return BST_Search (left[x], k); 
else  
   return BST_Search (right[x], k)

Сложность двоичного дерева поиска

Средний случай Худший случай
Космическая сложность На) На)
Сложность поиска O (журнал n) На)
Сложность вставки O (журнал n) На)
Сложность удаления O (журнал n) На)