Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / Лабораторні роботи / Лабораторна робота 14.doc
Скачиваний:
8
Добавлен:
30.05.2020
Размер:
166.91 Кб
Скачать

Функція звільнення пам'яті, зайнятої деревом

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. Визначити число листя в лівій гілці дерева.

Контрольні питання

  1. Що таке деревовидна структура?

  2. В чому полягають особливості її використання?

  3. Перерахуйте та опишіть складовічастини дерева. Які між ними встановлені звязки?

  4. Що таке внутрішній вузол? Наведіть відповідний приклад.

  5. Що таке порядок вузла? Наведіть відповідний приклад.

  6. Що таке міра дерева? Наведіть відповідний приклад.

  7. Що таке висота (глибина) вузла? Наведіть відповідний приклад.

  8. Що таке висота дерева? Наведіть відповідний приклад.

  9. Що таке бінарне дерево пошуку? як і для чого воно використовується?

  10. Що таке АVL –дерево? Чим воно особливе?

  11. Які прийоми використовуються при роботі з деревами? Опишіть кожен з них.