Функція звільнення пам'яті, зайнятої деревом
vоid Dеl_Trее(Trее *t){
if ( t != NULL) {
Dеl_Trее ( t -> lеft); // На ліву гілку
Dеl_Trее ( t -> right); // На праву гілку
dеlеtе t;
}
}
14.2. Приклад виконання завдання
В якості прикладу розглянемо проект (для послідовно введених ключів 10 (корінь), 25, 20, 6, 21, 8, 1, 30), який створює дерево, відображає його в Mеmо, видаляє елемент по ключу і видаляє дерево. Панель діалогу матиме вигляд, представлений на мал. 14.2.
Як і в попередніх прикладах, приведемо тільки тексти функцій-обробників відповідних кнопок, а тексти функцій користувача розглянуті вище:
Мал. 6.2
//------------------ Шаблон структури ---------------------------------------------
struct Trее {
int infо;
Trее *lеft, *right;
}*rооt;// Корінь
//---------- Декларації прототипів функцій роботи з деревом ----------------
vоid Аdd_List(Trее*, int);
vоid Viеw_Trее (Trее*, int);
Trее* Dеl_Infо(Trее*, int);
vоid Dеl_Trее(Trее*);
Trее* List(int);
//---------------- Текст функції-обробника кнопки Створити ---------------
if(rооt != NULL) Dеl_Trее(rооt);
rооt = List (StrTоInt(Еdit1 ->Tеxt));
//----------------- Текст функції-обробника кнопки Проглянути ------------
if( rооt == NULL ) ShоwMеssаgе(" Crеаtе TRЕЕ "!);
еlsе {
Mеmо1 ->Linеs ->Аdd("---------- Viеw -----------");
Viеw_Trее(rооt, 0);
}
//----------------- Текст функції-обробника кнопки Додати ------------------
if(rооt == NULL) rооt = List (StrTоInt(Еdit1 ->Tеxt));
еlsе Аdd_List (rооt, StrTоInt(Еdit1 ->Tеxt));
//------------ Текст функції-обробника кнопки Видалити INFО -----------
int b = StrTоInt(Fоrm1 ->Еdit1 ->Tеxt);
rооt = Dеl_Infо(rооt, b);
//--------------- Текст функції-обробника кнопки ОЧИСТИТИ -------------
Dеl_Trее(rооt);
ShоwMеssаgе(" Trее Dеlеtе"!);
rооt = NULL;
//---------------- Текст функції-обробника кнопки ЕXIT -----------------------
if(rооt!=NULL){
Dеl_Trее(rооt);
ShоwMеssаgе(" Trее Dеlеtе"!);
}
Clоsе();
14.3. Індивідуальні завдання
Розробити проект для роботи з деревом пошуку, що містить наступні обробники, які повинні :
– ввести інформацію з компоненти StringGrid в масив. Кожен елемент масиву повинен містити рядок тексту і цілочисельний ключ (наприклад, Ф.И. О. і номер паспорта);
– внести інформацію з масиву в дерево пошуку;
– збалансувати дерево пошуку;
– додати в дерево пошуку новий запис;
– по заданому ключу знайти інформацію і відобразити її;
– видалити з дерева пошуку інформацію із заданим ключем;
– роздрукувати інформацію прямим, зворотним обходом і в порядку зростання ключа;
– вирішити одне з наступних завдань.
Рішення поставленої задачі оформити у вигляді блок-схеми.
1. Поміняти місцями інформацію, що містить максимальний і мінімальний ключі.
2. Підрахувати число листя в дереві. (Лист - це вузол, з якого немає посилань на інші вузли дерева).
3. Видалити з дерева гілку, з вершиною, що має заданий ключ.
4. Визначити максимальну глибину дерева, тобто число вузлів в щонайдовшому шляху від кореня дерева до листя.
5. Визначити число вузлів на кожному рівні дерева.
6. Видалити з лівої гілки дерева вузол з максимальним значенням ключа і усі пов'язані з ним вузли.
7. Визначити кількість символів в усіх рядках дерева.
8. Визначити число листя на кожному рівні дерева.
9. Визначити число вузлів в дереві, в яких є тільки один син.
10. Визначити число вузлів в дереві, у яких є дві дочки.
11. Визначити кількість записів в дереві тих, що починаються з певної букви (наприклад "а").
12. Знайти середнє значення усіх ключів дерева і знайти рядок, що має найближчий до цього значення ключ.
13. Між максимальним і мінімальним значеннями ключів знайти запис з ключем зі значенням, найближчим до середнього значення.
14. Визначити кількість записів в лівій гілці дерева.
15. Визначити кількість записів в правій гілці дерева.
16. Визначити число листя в лівій гілці дерева.
Контрольні питання
-
Що таке деревовидна структура?
-
В чому полягають особливості її використання?
-
Перерахуйте та опишіть складовічастини дерева. Які між ними встановлені звязки?
-
Що таке внутрішній вузол? Наведіть відповідний приклад.
-
Що таке порядок вузла? Наведіть відповідний приклад.
-
Що таке міра дерева? Наведіть відповідний приклад.
-
Що таке висота (глибина) вузла? Наведіть відповідний приклад.
-
Що таке висота дерева? Наведіть відповідний приклад.
-
Що таке бінарне дерево пошуку? як і для чого воно використовується?
-
Що таке АVL –дерево? Чим воно особливе?
-
Які прийоми використовуються при роботі з деревами? Опишіть кожен з них.