
- •Тема 7 Древовидные структуры данных
- •Понятие древовидной структуры данных
- •Древовидное размещение списка данных
- •Основные определения
- •Для реализации древовидных структур данных степени m используется уже знакомая нам следующая конструкция
- •Пример прямого размещения данных
- •После того как дерево заполнено информацией, его нужно уметь просмотреть, распечатать, осуществить поиск.
- •Обходом дерева называется последовательное обращение ко всем его узлам.
- •Прямой обход
- •Обратный обход
- •• Var proot,p:Ptree; //
- •Поиск при обходе
- •Удаление дерева из памяти
- •Бинарное дерево поиска
- •Ввиду своеобразной организации эффективность поиска информации в такой динамической структуре данных сравнима
- •Сбалансированное и несбалансированное деревья
- •Основные операции с бинарным деревом поиска
- •Класс для работы с деревом
- •Работа с деревом
- •Создать дерево
- •Удалить дерево
- •Симметричный обход слева направо
- •Симметричный обход слева направо
- •Симметричный обход справа налево
- •Поиск ключа не требует рекурсии
- •Метод poisk(k)
- •Поиск элемента с минимальным (максимальным) ключом
- •Методы поиска элемента с минимальным (максимальным) ключом
- •Добавить новый элемент в дерево не нарушая его структуру
- •Метод Add(inf) (начало)
- •Метод Add(inf) (конец)
- •Пересылка элементов из произвольного массива в дерево
- •Примеры деревьев получаемых Make
- •Распечатать массив в порядке возрастания (убывания) ключа
- •Построение сбалансированного дерева поиска
- •Построение сбалансированного дерева поиска
- •Удаление узла с заданным ключом
- •Удаление узла с заданным ключом
- •Удаление узла, имеющего двух дочерей
- •Удаление узла, имеющего двух дочерей
- •Метод удаления Delk(k) поиск ключа
- •Метод удаления Delk(k) узел имеет одну дочь
- •Delk(k)
- •Delk(k)
- •Контрольные вопросы
- •Задачи на экзамен
- •Задачи на экзамен
- •Задачи на экзамен
Метод Add(inf) (начало)
•Procedure TBtr.Add(Inf:TInf);
•Var bl:Boolean;
•begin
• |
New(w); // создание нового листа: |
• |
w^.Inf:=Inf; |
• |
w^.A1:=Nil; |
• |
w^.A2:=Nil; |
• |
if proot=Nil then proot:=w |
• |
else |
• |
begin |
• |
|
• |
// добавление листа… |
07/02/19 |
31 |
Метод Add(inf) (конец)
• |
// Поиск места для добавления листа… |
•p:=proot;
•repeat
• |
q:=p; // q - указатель на предыдущий элемент |
|
• |
bl:=Inf.key<p^.Inf.key; |
|
• |
if bl then p:=p^.A1 |
|
• |
else p:=p^.A2; |
|
• |
until p=Nil; |
// добавление листа |
• |
if bl then q^.A1:=w |
|
• |
else q^.A2:=w; |
•end;
•end;
07/02/19 |
32 |
Пересылка элементов из произвольного массива в дерево
Пусть имеется некоторый массив из n значений данных с разными ключами
•type Tms=array[1..nr] of Tinf;
•Procedure TBtr.Make(a:Tms;n:word);
• |
begin |
• |
For i:=1 to n do Add(a[i]); |
• |
end; |
При случайном чередовании ключей в массиве а метод Make обычно формирует дерево неплохо сбалансированное.
Однако, если массив а частично упорядочен, то получается плохо
07/02/19 |
33 |
сбалансированное дерево |
|

Примеры деревьев получаемых Make
1 2 4 3 7 |
5 3 7 2 4 6 8 |
|
|
1 |
5 |
2 |
|
3 |
|
7 |
|
|
|
||
|
|
|
|
|
4 |
2 |
4 |
7 |
8 |
|
37
07/02/19 |
34 |
Распечатать массив в порядке возрастания (убывания) ключа
•tr.Make(a:Tms;n:word);
•tr.Wrt1;
•tr.Wrt2;
•Если в методе Wrt1 вместо печати записывать
очередной элемент в массив то получаем метод сортировки. Массив желательно организовать динамический.
07/02/19 |
35 |
Построение сбалансированного дерева поиска
(вариант 1)
•Procedure TBtr.BLns1(a:Tms;n:word);
•Procedure BL(i,j:Word);
• |
Var m:Word; |
• |
begin |
•if i<=j then
• begin
•m:=i+j div 2;
•Add(a[m]);
•BL(i,m-1);
•BL(m+1,j);
• |
end; |
• |
end; |
• |
begin BL(1,n); |
•end;
07/02/19 |
36 |
Построение сбалансированного дерева поиска
(вариант 2 без make)
•Procedure TBtr.BLns2(a:Tms;n:word);
•Function BL(i,j:Word):Ttree;
• |
Var p:Ttree; m:Word; |
• |
begin |
• |
if i>j then p:=Nil |
• |
else begin |
• |
m:=i+j div 2; |
• |
New(p); p^.inf:=a[m]; |
• |
p^.A1:=BL(i,m-1); |
• |
p^.A2:=BL(m+1,j); |
• |
end; |
• |
result:=p; |
• |
end; |
•begin proot:=BL(1,n);
•end;
07/02/19 |
37 |

Пример а= 1 2 3 4 5 6 7 8 9
5
2 |
7 |
|
1 |
3 |
6 |
8 |
|
|||
|
|
|
4 |
9 |
|
07/02/19 |
38 |

Удаление узла с заданным ключом
Узел= лист
q
5 |
5 |
p
key=4
4 |
8 |
N |
8 |
NN
07/02/19 |
39 |

Удаление узла с заданным ключом
Узел имеет одну дочь
q
5 |
5 |
p
key=3
3 |
8 |
4 |
8 |
N4
07/02/19 |
40 |