Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка2.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
3.11 Mб
Скачать

4.6 Порядок обходу вузлів дерева: обернений і внутрішній. Властивості обходу вузлів дерева: прямий, обернений і внутрішній. Властивості обходу дерев. Порядок та властивості обходу дерева.

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

Існують три види таких обходів, кожний з яких визначається рекурсивно:

  • прямий порядок (англ. preorder) наступної послідовності:

    1. відвідати корінь;

    2. відвідати ліве піддерево;

    3. відвідати праве піддерево.

Тобто, в такому порядку обходу кожна вершина відвідується до того, як будуть відвідані її діти.

  • зворотний порядок (англ. postorder) наступної послідовності:

    1. відвідати ліве піддерево;

    2. відвідати праве піддерево;

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

Тобто, в такому порядку кожна вершина відвідується лише після того, як будуть відвідані її діти.

  • центрований (центральний) порядок (англ. inorder) наступної послідовності:

    1. відвідати ліве піддерево;

    2. відвідати корінь;

    3. відвідати праве піддерево.

В такому порядку кожна вершина відвідується між відвіданням лівої та правої дитини. Такий порядок особливо часто застосовується в бінарних деревах пошуку, тому що дає можливість обходу вершин у порядку збільшення їхніх порядкових номерів.

Приклад

Для цього бінарного дерева,

  • Прямий порядок: 2, 7, 2, 6, 5, 11, 5, 9, 4.

  • Зворотній порядок: 2, 5, 11, 6, 7, 4, 9, 5, 2.

  • Центрований (центральний) порядок: 2, 7, 5, 6, 11, 2, 5, 4, 9.

Порядок та властивості обходу вузлів дерева.

Є три операції обходу вузлів дерева, що відрізняються порядком обходу вузлів.

Перша операція – INFIX_TRAVERSE – дозволяє обійти всі вузли дерева в порядку зростання ключів і застосувати до кожного вузла задану користувачем функцію call_back_function. Ця функція працює тільки з парою (K,V), яка зберігається у вузлі. Операція INFIX_TRAVERSE реалізується рекурсивно: спочатку вона запускає себе для лівого піддерева, потім запускає дану функцію для корення , далі запускає себе для правого піддерева.

Infix_traverse ( call_back_function ) - обійти все дерево, слідуючи порядку (ліве піддерево, корінь, праве піддерево).

Prefix_traverse ( call_back_function ) - обійти все дерево, слідуючи порядку (корінь, ліве піддерево, праве піддерево).

Postfix_traverse ( call_back_function ) - обійти все дерево, слідуючи порядку (ліве піддерево, праве піддерево, корінь).

Infix_traverse:

Дано: дерево Т і функція f

Задача: застосувати f до всіх вузлів дерева Т в порядку зростання ключів

Алгоритм:

  • Якщо дерево порожнє, зупинитися.

  • Інакше

  • Рекурсивно обійти праве піддерево Т.

  • Застосувати функцію f до кореневого вузла.

  • Рекурсивно обійти ліве піддерево Т.

У простому випадку, функція f може виводити значення пари (K,v). При використанні операції Infix_traverse будуть виведені всі пари в порядку зростання ключів. Якщо ж використовувати Prefix_traverse, то пари будуть виведені в порядку, відповідним опису дерева.

Розділ 5. Комбінаторні обчислювання на скінчених множинах.