- •Деревья
- •Дерево- это совокупность элементов (узлов), один из которых определен как корень, и отношений,
- •Пример дерева
- •Степень вершины дерева – число ее непосредственных потомков.
- •Сбалансированность дерева влияет на время поиска.
- •Дерево называется
- •Идеально сбалансированное дерево
- •Сбалансированное дерево
- •Двоичные деревья
- •Отображение дерева в ОП
- •Левой (правой) ветвью элемента
- •Пример двоичного дерева и соответствующей ему связной структуры
- •Основные операции, выполняемые над деревьями
- •Упорядоченное двоичное дерево
- •Построение упорядоченного двоичного дерева
- •Выбор места для 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);
Левой (правой) ветвью элемента
называется совокупность всех элементов дерева, к которым имеется путь от этого элемента через его левый (правый) указатель.
11
Пример двоичного дерева и соответствующей ему связной структуры
|
|
A |
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
B |
|
C |
|
B |
|
C |
|
|
|
|
|
|
||
D |
E |
F |
G |
D |
E |
F |
G |
12
Основные операции, выполняемые над деревьями
1)включение элемента;
2)поиск элемента по заданному ключу;
3)исключение элемента из дерева;
4)обход дерева.
13
Упорядоченное двоичное дерево
(бинарное дерево поиска)
Упорядоченное двоичное дерево (бинарное дерево поиска) удовлетворяет следующему условию: для каждого узла дерева все ключи в левой ветви меньше, а в правой ветви больше или равны значению ключа данного узла.
14
Построение упорядоченного двоичного дерева
1)Ключ, поступивший первым, располагается в корне дерева (пусть это будет a1).
2)Если a2 (ключ второго узла) больше или равен a1, то a2 помещается в правую ветвь узла a1, в противном случае – в левую ветвь:
a |
a2>=a1 |
a2<a1 |
a1 |
1 |
|
||
|
|
|
|
|
a2 |
a2 |
15 |
|
|
|
Выбор места для ai производится следующим образом:
если ai< a1 – выполняется переход по левой ветви корня;
если ai>=a1 – переход по правой ветви корня;
если ai< aj – переход по левой ветви узла aj;
если ai>=aj – переход по правой ветви узла aj.
Переходы по ветвям (спуск по уровням дерева) выполняются до тех пор, пока не будет найден
соответствующий пустой указатель. |
16 |
|
Например, если ключи поступают в последовательности: 67, 13, 45, 270, 34, 58, 6, 340, 125, 76, 251, 380, то упорядоченное двоичное дерево будет иметь вид:
67
13 |
270 |
6 |
45 |
125 |
340 |
34 |
58 |
76 |
251 |
380 |
17
Описание элемента дерева на языке Паскаль имеет вид:
TYPE U = ^Zap; |
|
Zap = RECORD |
|
UKZL : U; |
|
INF : Integer; |
|
. . . . . . |
|
UKZP : U |
|
END; |
18 |
Процедура включения элемента в упорядоченное двоичное дерево
Формальные параметры:
PDR – указатель на корень дерева (<>Nil); UVKL – указатель включаемого элемента

INF

Включение элемента в корень дерева нужно
осуществлять по другой процедуре. |
19 |
|
Procedure VKL (Var Pdr,Uvkl : U);
Var
Pt : U;
Begin
Pt:=Pdr;
20
