- •Деревья
- •Дерево- это совокупность элементов (узлов), один из которых определен как корень, и отношений,
- •Пример дерева
- •Степень вершины дерева – число ее непосредственных потомков.
- •Сбалансированность дерева влияет на время поиска.
- •Дерево называется
- •Идеально сбалансированное дерево
- •Сбалансированное дерево
- •Двоичные деревья
- •Отображение дерева в ОП
- •Левой (правой) ветвью элемента
- •Пример двоичного дерева и соответствующей ему связной структуры
- •Основные операции, выполняемые над деревьями
- •Упорядоченное двоичное дерево
- •Построение упорядоченного двоичного дерева
- •Выбор места для ai производится следующим образом:
- •Например, если ключи поступают в последовательности: 67, 13, 45, 270, 34, 58, 6,
- •Описание элемента дерева на языке Паскаль имеет вид:
- •Процедура включения элемента в упорядоченное двоичное дерево
- •Procedure VKL (Var Pdr,Uvkl : U);
- •While True Do
- •{ переход по левой ветви }
- •Поиск элемента в дереве
- •Процедура поиска
- •Proceduse Poisk (Var Pdr, Elem:U; Kl:integer);
While True Do
If Uvkl^.INF>=Pt^.INF Then
{ переход по правой ветви }
If Pt^.Ukzp=Nil Then
Begin
Pt^.Ukzp:=Uvkl;
Exit
End
Else
Pt:=Pt^.Ukzp
Else |
21 |
|
{ переход по левой ветви }
If Pt^.Ukzl=Nil Then
Begin
Pt^.Ukzl:=Uvkl;
Exit
End
Else
Pt:=Pt^.Ukzl
End;
22
Поиск элемента в дереве
Средняя длина поиска Cср зависит от структуры
дерева. Если дерево сбалансировано (то есть все уровни заполнены, кроме, может быть, последнего), то Cср = log2(n+1) – 2 (n- число
внутренних узлов).
Для несбалансированного дерева (данные включаются в случайном порядке) Cср =
1,44*log2(n); для больших n: Cср = 2*log2(n)
23
Процедура поиска
Формальные параметры: Pdr – указатель корня дерева;
Elem- указатель (адрес) найденного элемента; если поиск неуспешен, то Elem должен быть равным Nil;
Kl – ключ поиска.
24
Proceduse Poisk (Var Pdr, Elem:U; Kl:integer);
Var Pt : U; |
|
Begin |
|
Pt:=Pdr; |
|
ELEM:=Nil; |
|
While True do |
|
Begin |
|
If Kl=Pt^.inf Then |
{ запись найдена } |
Begin |
|
Elem:=Pt; |
|
Exit |
|
End; |
25 |
If Kl>Pt^.inf Then
If Pt^.Ukzp=Nil Then
Еxit
Else
Pt:=Pt^.Ukzp
Else
If Pt^.Ukzl=Nil Then
Exit
Else
Pt:=Pt^.Ukzl
End;
End;
{переход по правой ветви }
{элемент не найден}
{переход по левой ветви }
{элемент не найден}
26