Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 6
на тему:
" Структура даних
БІНАРНЕ ДЕРЕВО ПОШУКУ"
з дисципліни:
" Програмування. Частина III. Структури даних та алгоритми "
№ варіанта = [(3) + (111)] % 20 + 1 = 15
1. МЕТА РОБОТИ
Вивчення абстрактної структури даних "Бінарне дерево пошуку". Набуття практичних навичок побудови дерева та використання його для розв'язання прикладних задач.
Постановка задачі
Побудувати бінарне дерево пошуку для послідовності чисел, що вводяться з клавіатури. Реалізувати операції додавання та вилучення вузлів з бінарного дерева пошуку. Виконати обхід дерева у заданому порядку та показати:
послідовність вершин дерева при проходженні його у прямому порядку;
послідовність листків дерева при проходженні його у зворотньому порядку;
послідовність вузлів, що мають тільки одного нащадка при проходженні дерева у симетричному порядку.
Виконати індивідуальне завдання згідно з варіантом.
15. Знайти найближчого спільного предка двох заданих вузлів дерева.
3. Динаміка вмісту БД пошуку
3.1. Задаємо вхідну послідовність 10 цілих чисел: 77, 54, 83, 64, 50, 90, 80, -83, 63, -54.
3.2. Схематичне зображення дерева:
Add(77);
77
Add(54);
Add(83);
Add(64);
Add(50);
Add (90);
Add(80);
Delete (83);
Add (63);
Delete (54);
Реалізація БД пошуку на базі масиву розмірністю 17:
Індекси
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
info
0
х
77
50
х
63
х
90
х
х
80
х
х
64
х
х
х
father
0
0
0
5
1
2
4
2
6
8
7
9
11
5
12
14
15
left-son
0
0
5
0
0
3
0
10
0
0
0
0
0
0
0
0
0
right-son
0
4
7
0
6
13
8
0
9
11
0
12
14
0
15
16
0
Head = 2;
Free = 1;
3.4. Обхід БД пошуку:
а) послідовність вершин дерева при проходженні його у прямому порядку:
63 90
б) послідовність листків дерева при проходженні його у зворотньому порядку:
50 64 80
в) послідовність вузлів, що мають тільки одного нащадка при проходженні дерева у симетричному порядку:
90
3.5 Знайти найближчого спільного предка двох заданих вузлів дерева.
Знайти найближчого спільного предка для вузлів дерева: 50 і 90.
Найближчий спільний предок - 77
Алгоритм розв’язання задачі
ШАБЛОННИЙ ПАРАМЕТР, ОПЕРАТОРИ ПЕРЕІМЕНОВАННЯ ТИПІВ ТА КОНСТАНТНІ ЧЛЕНИ класу BinaryTree<T>
Шаблонний параметр T предтставляє собою тип елементів, що зберігаються у списку.
Він може бути довільним вбудованим типом в мові С++ а також структурою, класом (в якому визначений конструктор по замовчуванню),конструктор копіювання і оператор присвоєння.
BinaryTree<T>::TreeNode::data - зберігає інформаційне поле елемента БД
BinaryTree <T>::TreeNode::left - зберігає адресу наступного лівого елемента БД.
BinaryTree <T>::TreeNode::right - зберігає адресу наступного правого елемента БД.
BinaryTree <T>:: root - зберігає адресу кореня БД
КОНСТРУКТОР ШАБЛОННОГО КЛАСУ BinaryTree<Т>
BinaryTree ()
Післяумова: дерево ініціалізується порожнім
МОДИФІКУЮЧІ ФУНКЦІЇ-ЧЛЕНИ шаблонного класу List<Item>:
bool Add(TreeNode **rt, T item);
Післяумова: в БД занесено новий елемент.
TreeNode * WhoLeft(TreeNode *rt);
Післяумова: повертає вказівник на лівий елемент пілся rt.
TreeNode * WhoRight(TreeNode *rt);
Післяумова: повертає вказівник на правий елемент пілся rt.
void Del_Help(TreeNode ** root_ptr, TreeNode **del_node_ptr);
Допоміжна функція для Delete;
bool Delete(TreeNode **rt, T item);
Передумова: дерево не є порожнім
Післяумова: з дерева видалено елемент.
TreeNode ** RefRoot();
Післяумова: повернення ссилки вказівника на корінь.
TreeNode * RRoot();
Післяумова: повернення вказівника на корінь
void PrintLevel(TreeNode *rt, int k, int i);
Післяумова: виведення дерева на екран
void GoStraight(TreeNode *rt);
Післяумова: проходження вузлів БД в прямому порядку.
void GoSymmetric(TreeNode *rt);
Післяумова: проходження вузлів БД в симетричному порядку.
void GoReverse(TreeNode *rt);
Післяумова: проходження вузлів БД в оберненому порядку.
КОНСТАНТНІ ФУНКЦІЇ-ЧЛЕНИ шаблонного класу List <T>:
bool empty() const;
Післяумова: true, якщо дерево порожнє і false в іншому випадку.
5. Результати виконання програми
/
Висновки.
На цій лабораторній роботі я вивчив фундаментальну абстрактну структуру даних бінарне дерево пошуку, набув практичних навичок побудови даного дерева, дослідив динаміку його вмісту та використання БД для розв'язання прикладних задач.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!