
- •Розділ 3.
- •3.9. АТД “Дерево”
- •Розглянуті раніше списки, стеки та черги належать до лінійних динамічних структур даних. Визначальною
- •Представлення дерев за допомогою масивів
- •дерево
- •Використання покажчиків або курсорів на батьків не допомагає в реалізації операторів, що вимагають
- •Представлення дерев з використанням списків синів
- •З прикладом реалізації можна ознайомитись в (с.87-88 [1]).
- •Серед недоліків такої структури даних можна назвати те, що вона не дозволяє створювати
- •3.10. Бінарні дерева
- •Представлення бінарних дерев за допомогою масивів
- •Представлення бінарних дерев за допомогою нелінійних динамічних структур
- •Приклад бінарного дерева як динамічної структури даних
- •Алгоритми роботи з бінарними деревами Створення бінарного дерева
- •Приклад. Створення бінарного дерева із заданою користувачем кількістю вузлів.
- •Функція створення дерева tree отримує один цілочисловий параметр AmountNode, що визначає кількість вузлів
- •Дерево відображатиме рекурсивна процедура printtree. Піддерево рівня L виводитиметься так: спочатку буде відображене
- •Обхід дерева
- •Результати обходу дерева.
- •Будь-який спосіб обходу дерева можна реалізувати рекурсивною процедурою.
- •Дерева бінарного пошуку
- •Вузол із заданим значенням ключа буде знайдений доволі швидко, якщо спускатися від кореня
- •Приклад. Функція знаходження ключового значення в бінарному дереві пошуку.
- •Включення вузлів у дерево
- •Приклад. Включення вузла в бінарне дерево пошуку.
- •У програмі, що реалізує пошук із включенням, компоненти бінарного дерева містять два інформаційні
- •Видалення вузлів бінарного дерева
- •Якщо видаляється вузол х, який має одного нащадка, то покажчику на цей вузол
- •Якщо видаляється вузол х, який має двох нащадків, на місце х слід переставити
- •Домашнє завдання

Приклад. Включення вузла в бінарне дерево пошуку.
Включення вузла в дерево має здійснюватися так, щоб не порушувалася властивість упорядкованості ключів. Це правило буде дотримане, якщо застосувати розглянутий раніше алгоритм знаходження ключового значення у бінарному дереві пошуку, а включення нового елемента здійснювати тоді, коли пошук завершився безуспішно.

У програмі, що реалізує пошук із включенням, компоненти бінарного дерева містять два інформаційні поля: поле рядкового типу для збереження слова та цілочислове поле для збереження кількості повторень слова.



Видалення вузлів бінарного дерева
Можливі три випадки видалення вузла бінарного дерева пошуку :
–вузол, що видаляється, є листком дерева;
–вузол, що видаляється, має одного нащадка;
–вузол, що видаляється, має двох нащадків.
Задача розв'язується найпростішим способом тоді, коли вузол, що видаляється, є листком дерева. У такому разі слід звільнити ділянку динамічної пам'яті, яку цей вузол займав, та присвоїти значення nil покажчикові на даний вузол.

Якщо видаляється вузол х, який має одного нащадка, то покажчику на цей вузол слід присвоїти адресу його нащадка і звільнити пам'ять, яку вузол х займав.

Якщо видаляється вузол х, який має двох нащадків, на місце х слід переставити інший вузол дерева так, щоб не порушувалася властивість впорядкованості ключів. Вузол, що переставляється, називається
термінальним.
Один із способів визначення термінального вузла полягає у виконанні спуску по правій гілці лівого піддерева х доти, доки не буде знайдено вузла без правого нащадка. Цей вузол і є термінальним, його значення може бути записане до вузла х без порушення впорядкованості ключів. Сам термінальний вузол має бути видалений після копіювання його значення до вузла х.




