Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 4 оп.doc
Скачиваний:
3
Добавлен:
14.08.2019
Размер:
242.18 Кб
Скачать

Мал. 11: Двійкове дерево

Глибина бінарного дерева - це максимальний рівень листа дерева, що рівне довжині щонайдовшого шляху від кореня до листа дерева.

Отже, глибина дерева на першому малюнку рівна 3.

Повне бінарне дерево рівня n - це дерево, в якому кожен вузол рівня n є листом і кожен вузол рівня менше n має непорожні ліве і праве піддерева

Мал. 12.

На мал. 12 приведений приклад повного бінарного дерева рівня 3.

Мал. 13

Визначить чи є збалансованими дерева на мал. 13

Є ще один різновид бінарних дерев, який називається впорядковані бінарні дерева.

Впорядковані бінарні дерева - це дерева, в яких для кожного вузла Х виконується правило: у лівому поддереве - ключі, менші Х, в правому поддереве - великі або рівні Х. Наприклад, дерево на мал. 10.

Щоб знайти в такому дереві якесь значення, ми стартуємо з кореня і рухаємося вниз. Наприклад, для пошуку числа 16, ми помічаємо, що 16 < 20, і тому йдемо вліво. При другому порівнянні бачимо, що 16 > 7, і тому ми рухаємося управо. Третя спроба успішна - ми знаходимо елемент з ключем, рівним 16.

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

Мал. 14: Незбалансоване бінарне дерево

Структура бінарного дерева побудована з вузлів.

Вузол дерева містить поле даних і два поля з покажчиками.

Мал. 15

Поля покажчиків називаються лівим покажчиком і правим покажчиком, оскільки вони указують на ліве і праве поддерево, відповідно. Значення nil є ознакою порожнього дерева.

Тоді бінарне дерево можна буде представити в наступному вигляді мал 16.

Мал. 16.

Дії з бінарними деревами

Розглядаючи дії над деревами, можна сказати, що для побудови дерева необхідно формувати вузли, і, визначивши заздалегідь місце включення,  включати їх  в дерево.  Кількість вузлів визначається необхідністю. Алгоритм включення повинен бути відомий і постійний. Вузли дерева можуть бути використані для зберігання якої-небудь інформації.

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

Може виникнути завдання і знищення дерева в той момент, коли необхідність в нім (у інформації, записаній в його елементах) відпадає. У ряді випадків може потрібно знищення піддерева.

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

Побудова бінарного дерева

Важливим поняттям деревовидної структури є поняття двійкового дерева пошуку. Правило побудови двійкового дерева пошуку: елементи, у яких значення деякої ознаки менше, ніж біля кореня, завжди включаються зліва від деякого поддерева, а елементи із значеннями, більшими, ніж біля кореня - справа. Цей принцип використовується і при формуванні двійкового дерева, і при пошуку в нім елементів. Таким чином, при пошуку елементу з деяким значенням ознаки відбувається спуск по дереву, починаючи від кореня, причому вибір гілки наступного кроку - направо або наліво згідно значенню шуканої ознаки - відбувається в кожному черговому вузлі на цьому шляху. При пошуку елементу результатом буде або знайдений вузол із заданим значенням ознаки, або пошук закінчиться листом з «нульовим» посиланням, а необхідний елемент відсутній на пройденому по дереву шляху. Якщо пошук був виконаний для включення чергового вузла в дерево, то в результаті буде знайдений вузол з порожнім посиланням (порожніми посиланнями), до якого справа або зліва відповідно до значення ознаки і буде приєднаний новий вузол.

Розглянемо приклад формування двійкового дерева. Припустимо, що потрібно сформувати двійкове дерево, вузли (елементи) якого  мають наступні значення ознаки: 20, 10, 35, 15, 17, 27, 24, 8, 30. У цьому ж порядку вони і поступатимуть для включення в двійкове дерево. Першим вузлом в дереві (коренем) стане вузол із значенням 20. Звернути увагу: пошук місця підключення чергового елементу завжди починається з кореня.  До Кореню зліва підключається елемент 10. До Кореню справа підключається елемент 35. Далі елемент 15 підключається справа до 10, проходячи шлях: корінь 20 - наліво - елемент 10 - направо - підключення, оскільки далі за шлях немає. Процес триває до вичерпання елементів, що включаються. Результат представлений на мал. 17.

Мал. 17

Над бінарним деревом є операція - його проходження, тобто потрібно обійти все дерево, відзначивши кожен вузол один раз.

Існує 3 способи обходу бінарного дерева.

  1. у прямому порядку

  2. у симетричному порядку

  3. у зворотному порядку

У прямому порядку:

  1. Потрапити в корінь

  2. Пройти в прямому порядку ліве поддерево

  3. Пройти в прямому порядку праве поддерево

У симетричному порядку:

  1. Пройти в симетричному порядку ліве поддерево

  2. Потрапити в корінь

  3. Пройти в симетричному порядку праве поддерево

У зворотному порядку:

  1. Пройти в зворотному порядку ліве поддерево

  2. Пройти в зворотному порядку праве поддерево

  3. Потрапити в корінь

мал. 18

Мал. 19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]