Алгоритми на графах Обходи орієнтованих дерев
При виконанні алгоритмів, що використовують орієнтовані дерева, часто здійснюється обхід (відвідування) вершин дерева у деякому порядку. Відомі кілька способів організації таких обходів. Розглянемо процедури обходу орієнтованого дерева у прямому порядку та зворотному порядку. Нехай Т – упорядковане орієнтоване дерево; корінь дерева позначимо r.
Процедура обходу упорядкованого орієнтованого дерева у прямому порядку:
1) відвідати корінь r;
2) якщо v1,…,vk – дочірні вершини r, то застосувати процедуру обходу упорядкованого орієнтованого дерева у прямому порядку до піддерев з коренями v1,…,vk у зазначеному порядку.
Процедура обходу упорядкованого орієнтованого дерева у зворотному порядку:
1) якщо v1,…,vk – дочірні вершини r, то застосувати процедуру обходу упорядкованого орієнтованого дерева у зворотному порядку до піддерев з коренями v1,…,vk у зазначеному порядку;
2) відвідати r.
Розглянемо приклад. Нехай задано орієнтоване упорядковане дерево Т=({v1,v2,v3,v4,v5,v6,v7},{(v1,v2),(v1,v3),(v1,v4),(v3,v5),(v5,v6),(v5,v7)}). Будемо вважа-ти, що сини кожної вершини упорядковані згідно зі своїми номерами (наприклад, сини вершини v1 упорядковані таким чином: v2,v3,v4). Застосуємо до Т процедури обходу у прямому та зворотному порядку. Щоб відобразити порядок, у якому обходяться вершини дерева Т, будемо нумерувати верши-ну, коли вона відвідується. Нумерацію здійснюватимемо за допомогою цілих додатних чисел. Результати обходу Т у прямому та зворотному порядку зображено на рис.1,а,б.
Для обходу бінарного дерева визначимо процедуру обходу у внутрішньому порядку. Кожна вершина бінарного дерева, яка не є листком, має одного або двох синів. Нехай маємо упорядковане бінарне дерево. При-пишемо кожній його вершині, що є сином якоїсь вершини, одну з ознак: лівий (син) чи правий (син). Зазначимо, що коли вершина має лише одного сина, то він може мати будь-яку з цих ознак.
|
|
а) |
б) |
Рис. 1 |
Процедура обходу упорядкованого бінарного дерева у внутрішньому порядку:
1) якщо корінь дерева r має лівого сина vl, то застосувати процедуру обходу упорядкованого бінарного дерева у внутрішньому порядку до піддерева, що визначається вершиною vl;
2) Відвідати корінь r;
3) якщо корінь дерева r має правого сина vr, то застосувати процедуру обходу упорядкованого бінарного дерева у внутрішньому порядку до піддерева, що визначається вершиною vr.
Розглянемо приклад. Нехай задано бінарне дерево Т=({a,b,c,d,e,f},{(a,b), (a,c),(b,d),(c,e),(e,f)}). Припишемо кожній вершині-сину ознаку лівий або правий: b – лівий син вершини a, c – правий син вершини a, d – правий син вершини b, e – правий син вершини c, f – лівий син вершини e. Діаграма бінарного дерева Т зображена на рис.2,а. Ознаки лівий-правий визначаються нахилом дуг. На рис.2,б,в,г зображено результати обходу Т у прямому, зворотному та внутрішньому порядку.
|
|
|
|
а) |
б) |
в) |
г) |
Рис. 2 |