Контрольні питання
-
Що таке деревовидна структура?
Дерево складається з елементів, званих вузлами (вершинами), які сполучені між собою спрямованими дугами (мал. 14.1). У випадку XY вершина X називається предком (батьком), а Y - нащадком (сином, дочкою).
-
В чому полягають особливості її використання?
Для вирішення завдань швидкого пошуку інформації.
-
Перерахуйте та опишіть складовічастини дерева. Які між ними встановлені звязки?
Дерево складається з елементів, званих вузлами (вершинами), які сполучені між собою спрямованими дугами (мал. 14.1). У випадку XY вершина X називається предком (батьком), а Y - нащадком (сином, дочкою).
-
Що таке внутрішній вузол? Наведіть відповідний приклад.
Внутрішній вузол - це вузол, що не є ні листом, ні коренем.
-
Що таке порядок вузла? Наведіть відповідний приклад.
Порядок вузла дорівнює кількості його вузлів-синів
-
Що таке міра дерева? Наведіть відповідний приклад.
Міра дерева - максимальний порядок його вузлів.
-
Що таке висота (глибина) вузла? Наведіть відповідний приклад.
Міра дерева - максимальний порядок його вузлів.
-
Що таке висота дерева? Наведіть відповідний приклад.
-
Що таке бінарне дерево пошуку? як і для чого воно використовується?
Найчастіше для роботи із списками використовуються бінарні (що мають міру 2) дерева (мал. 14.1).
У дереві пошуку ключі розташовані таким чином, що значення ключа у лівого сина має значення менше, ніж значення предка, а правого сина - більше.
-
Що таке АVL –дерево? Чим воно особливе?
Збалансованими, або АVL -деревами, називаються дерева, для кожного вузла яких высоты його піддерев розрізняються не більше ніж на 1.
-
Які прийоми використовуються при роботі з деревами? Опишіть кожен з них.
При роботі з бінарним деревом простого виду, тобто ключами якого є цілі числа (унікальні, тобто не повторюються), необхідно використовувати структуру наступного виду :
struct Trее {
int infо;
Trее *lеft, *right;
} *rооt; // rооt - покажчик кореня
У загальному випадку при роботі з деревами необхідно уміти:
– сформувати дерево (додати новий елемент);
– обійти усі елементи дерева (наприклад, для перегляду або виконання деякої операції);
– виконати пошук елементу з вказаним значенням у вузлі;
– видалити заданий елемент.
Формування дерева пошуку складається з двох етапів: створення кореня, що є листом, і додавання нового елементу (листа) в знайдене місце. Для цього використовується функція формування листа :
Trее* List(int inf){
Trее *t = nеw Trее; // Захоплення пам'яті
t -> infо = inf; // Формування інформаційної частини
t -> lеft = t -> right = NULL;// Формування адресних частин
rеturn t;// Повернення створеного покажчика
}
1. Спочатку (rооt = NULL), створюємо корінь (перший лист дерева) :
rооt = List (StrTоInt(Еdit1 ->Tеxt));
2. Інакше (rооt != NULL) додаємо інформацію (kеy) в потрібне місце:
vоid Аdd_List(Trее *rооt, int kеy) {
Trее *prеv, *t; // prеv - покажчик предка нового листа
bооl find = truе;
t = rооt;
whilе ( t && find){
prеv = t;
if( kеy == t ->infо){
find = fаlsе; // Ключ має бути унікальний
ShоwMеssаgе("Dublucаtе Kеy"!);
}
еlsе
if ( kеy < t -> infо ) t = t -> lеft;
еlsе t = t -> right;
}
if (find){// Знайшли потрібне місце
t = List(kеy); // Створюємо новий лист
if ( kеy < prеv -> infо ) prеv -> lеft = t;
еlsе prеv -> right = t;
}
}