Дерево (структура даних)Де́рево (англ. tree) — в інформатиці та програмуванні одна з найпоширеніших структур даних[1]. В математиці дерево визначається як скінченна множина Т з однією або більше вершин (вузлів, nodes), яка задовольняє наступні вимоги:
ВизначенняДерево (можливо, нелінійне) — структура даних, яка складається з вузлів (вершин) і ребер, без будь-яких циклів. Дерево без вузлів називається нульовим або порожнім деревом. Дерево, яке не є порожнім, складається з кореневого вузла і багатьох рівнів додаткових вузлів, які утворюють ієрархію. Використовувана термінологія
ВластивостіЗ визначення випливає, що кожна вершина є в свою чергу коренем деякого піддерева. Кількість піддерев вершини має назву ступеня (degree) цієї вершини. Вершина ступеню нуль має назву кінцевої (terminal) або листа (leaf). Некінцева вершина також має назву вершини розгалуження (branch node). Нехай x — довільна вершина дерева з коренем r. Тоді існує єдиний шлях з r до x. Усі вершини на цьому шляху називаються предками (ancestors) x; якщо деяка вершина y є предком x, то x називається нащадком (descendant) y. Нащадки та предки вершини x, що не збігаються з нею самою, називаються власними нащадками та предками. Кожну вершину x, в свою чергу, можна розглядати як корінь деякого піддерева, елементами якого є вершини-нащадки x. Якщо вершина x є предком y та не існує вершин поміж ними (тобто x та y з'єднані одним ребром), а також існують предки для x (тобто x не є коренем), то вершина x називається батьком (parent) до y, а y — дитиною (child) x. Коренева вершина єдина не має батьків. Вершини, що мають спільного батька, називаються братами (siblings). Вершини, що мають дітей, називаються внутрішніми (internal). Глибиною вершини x називається довжина шляху від кореня до цієї вершини. Максимальна глибина вершин дерева називається висотою. Якщо існує відносний порядок на піддеревах T1…Tm, то таке дерево називається впорядкованим (ordered tree) або пласким (plane tree). Лісом (англ. forest) називають множину дерев, які не перетинаються. Найчастіше дерева в інформатиці зображують з коренем, який знаходиться зверху (говорять, що дерево в інформатиці «росте вниз»). Важливим окремим випадком кореневих дерев є бінарні дерева, які широко застосовуються в програмуванні і визначаються як множина вершин, яка має виокремлений корінь та два піддерева (праве та ліве), що не перетинаються, або є пустою множиною вершин (на відміну від звичайного дерева, яке не може бути пустим). ПіддереваПіддерево — частина деревоподібної структури даних, яка може бути представлена у вигляді окремого дерева. Будь-який вузол дерева T разом з усіма його вузлами-нащадками є піддеревом дерева T. Для будь-якого вузла піддерева або має бути шлях в кореневий вузол цього піддерева, або сам вузол повинен бути кореневим. Тобто піддерево пов'язано з кореневим вузлом цілого дерева, а відносини піддерева з усіма іншими вузлами визначаються через поняття відповідне піддерево (за аналогією з терміном «відповідна підмножина»). Упорядкування деревІснує два основних типи дерев. У рекурсивному або невпорядкованому дереві має значення лише структура самого дерева без урахування порядку нащадків для кожного вузла. Дерево, в якому є заданий порядок (наприклад, кожному ребру, провідному до нащадка, присвоєні різні натуральні числа) називається деревом з іменованими ребрами або впорядкованим деревом зі структурою даних, заданої перед ім'ям. Впорядковані дерева є найбільш поширеними серед деревоподібних структур. Двійкове дерево пошуку — одне з різновидів упорядкованого дерева. Двійкове дерево — структура даних у вигляді дерева, в якому кожна вершина має не більше двох дітей. Зазвичай такі діти називаються правим та лівим. На базі двійкових дерев будуються такі структури, як двійкові дерева пошуку та двійкові купи. Представлення деревІснує безліч різних способів представлення дерев. Найбільш загальний спосіб представлення зображує вузли як записи, розташовані в динамічно виділеній пам'яті з вказівниками на своїх нащадків, предків (або і тих і інших), або, як елементи масиву, пов'язані між собою відносинами, визначеними їх позиціями в масиві (наприклад, двійкова купа). Дерева як графиВ теорії графів, дерево — зв'язний ациклічний граф. Кореневе дерево — це граф з вершиною, виділеною як коренева. У цьому випадку будь-які дві вершини, пов'язані ребром, успадковують відносини «батько-нащадок». Незв'язний граф, що складається виключно з дерев, називається лісом. Методи обходуПокроковий перебір елементів дерева по зв'язкам між вузлами-предками і вузлами-нащадками називається обходом дерева. Найчастіше, операція може бути виконана переходами вказівника на окремі вузли. Обхід, при якому кожен вузол-предок проглядається раніше його нащадків називається предвпорядкованим обходом або обходом в прямому порядку (pre-order walk), а коли проглядаються спочатку нащадки, а потім предки, то обхід називається післявпорядкованим обходом або обходом у зворотному порядку (post-order walk). Існує також симетричний обхід, при якому відвідується спочатку ліве піддерево, потім вузол, потім — праве піддерево, і обхід в ширину, при якому вузли відвідуються рівень за рівнем (N-й рівень дерева — безліч вузлів з висотою N). Кожен рівень обходиться зліва направо. Обхід бінарного дерева передбачає відвідування усіх вершин бінарного дерева, при цьому кожна з вершин відвідується тільки один раз. Існують три види таких обходів, кожний з яких визначається рекурсивно:
Для цього бінарного дерева,
Операції над деревом
Найбільшого розповсюдження ці структури даних набули в тих задачах, де необхідне маніпулювання з ієрархічними даними, ефективний пошук в даних, їхнє структуроване зберігання та модифікація. Загальне застосування
Див. також
Примітки
Джерела
|
Portal di Ensiklopedia Dunia