Обхід бінарного дерева або пошук по дереву є одним з видів обходу графу, який передбачає відвідування (перевірку або модифікацію) кожної вершини дерева рівно один раз. Такі обходи класифікуються за порядком відвідування вершин. Хоч далі наведені алгоритми для двійкового дерева, але їх можна узагальнити для інших дерев.
Види обходів дерев
На відміну від пов'язаних списків, одновимірних масивів та інших лінійних структур даних, для яких існує канонічний обхід за допомогою лінійного порядку, дерева можна обходити у різні способи. Їх можна обходити вглиб або вшир. Існує три найпоширеніші способи їх проходження вглиб: прямий (pre-order), зворотній (post-order) та серединний (in-order). Окрім цих основних обходів, можливі різні складніші або гібридні схеми, такі як глибокі пошукові запити, подібні до ітеративного поглиблення глибинного пошуку. Останній, як і пошук вшир, також може бути використаний для обходу нескінченних дерев, див. нижче.
Структури даних для обходу дерева
Обхід дерева передбачає ітераційний перегляд усіх вузлів. Оскільки з довільного вузла можна потрапити до більше ніж одного можливого наступного вузла (оскільки, це не лінійна структура даних), то, припускаючи послідовне обчислення (не паралельне), деякі вузли повинні бути відкладені, тобто, збережені якимось чином для подальшого відвідування. Це часто робиться з використанням таких структур як стек (LIFO) або черга (FIFO). Оскільки дерево є структурою даних, яка визначена рекурсивно, то обхід може бути визначений за допомогою рекурсії або, що є більш витонченим, корекурсії, у природній і зрозумілий спосіб; при використанні рекурсії відкладені вузли неявно зберігаються у стеці викликів.
Пошук вглиб легко реалізується через стек, в тому числі рекурсивно (через стек викликів), тоді як пошук вшир легко реалізується через чергу, в тому числі корекурсію.
Пошук вглиб у двійковому дереві
Такий пошук називаються пошуком вглиб (англ. depth-first search, DFS), оскільки по дереву пошуку просуваються максимально глибоко для кожного нащадка, перед тим, як перейти до наступного брата. Для двійкового дерева вони визначаються як операції доступу на кожному вузлі, починаючи з поточного вузла, алгоритм якого такий:
Загальний рекурсивний підхід для обходу двійкового дерева такий:
Спустіться на один рівень до рекурсивного аргументу N. Якщо N існує (тобто, не є порожнім), то виконуються наступні три операції у певному порядку: (L) Рекурсивно обійти для N ліве піддерево. (R) Рекурсивно обійти для N праве піддерево. (N) Обробити поточний вузол N. Повернутися, піднявшись на один рівень і прибути до батьківського вузла N.
У прикладах здебільшого (L) виконується перед (R). Але можливе виконання (R) перед (L), див. (RNL).
Існують три види таких обходів, кожний з яких визначається рекурсивно:
- прямий порядок (NLR) (англ. preorder) наступної послідовності:
- відвідати корінь
- відвідати ліве піддерево
- відвідати праве піддерево
- Тобто, в такому порядку обходу кожна вершина відвідується до того, як будуть відвідані її діти.
- зворотний порядок (LRN) (англ. postorder) наступної послідовності:
- відвідати ліве піддерево
- відвідати праве піддерево
- відвідати корінь
- Тобто, в такому порядку кожна вершина відвідується лише після того, як будуть відвідані її діти.
- серединний (центрований) порядок (LNR) (англ. inorder) наступної послідовності:
- відвідати ліве піддерево
- відвідати корінь
- відвідати праве піддерево
- В такому порядку кожна вершина відвідується між відвіданням лівої та правої дитини. Такий порядок особливо часто застосовується в бінарних деревах пошуку, тому що дає можливість обходу вершин у порядку збільшення їхніх порядкових номерів.
Приклад
Для цього бінарного дерева,
|
Див. також
Примітки
- . Архів оригіналу за 5 серпня 2018. Процитовано 2 травня 2015.
- (PDF). Архів оригіналу (PDF) за 28 серпня 2017. Процитовано 25 жовтня 2020.
{{}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title () - . Архів оригіналу за 11 квітня 2019. Процитовано 2 травня 2015.
- Вступ до алгоритмів, 2019, с. 302.
Література
- Т. Кормен; Ч. Лейзерсон; Р. Рівест; К. Стайн (2009) [1990]. Вступ до алгоритмів (вид. 3rd). MIT Press і McGraw-Hill. ISBN .
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Obhid binarnogo dereva abo poshuk po derevu ye odnim z vidiv obhodu grafu yakij peredbachaye vidviduvannya perevirku abo modifikaciyu kozhnoyi vershini dereva rivno odin raz Taki obhodi klasifikuyutsya za poryadkom vidviduvannya vershin Hoch dali navedeni algoritmi dlya dvijkovogo dereva ale yih mozhna uzagalniti dlya inshih derev Vidi obhodiv derevNa vidminu vid pov yazanih spiskiv odnovimirnih masiviv ta inshih linijnih struktur danih dlya yakih isnuye kanonichnij obhid za dopomogoyu linijnogo poryadku dereva mozhna obhoditi u rizni sposobi Yih mozhna obhoditi vglib abo vshir Isnuye tri najposhirenishi sposobi yih prohodzhennya vglib pryamij pre order zvorotnij post order ta seredinnij in order Okrim cih osnovnih obhodiv mozhlivi rizni skladnishi abo gibridni shemi taki yak gliboki poshukovi zapiti podibni do iterativnogo pogliblennya glibinnogo poshuku Ostannij yak i poshuk vshir takozh mozhe buti vikoristanij dlya obhodu neskinchennih derev div nizhche Strukturi danih dlya obhodu dereva Obhid dereva peredbachaye iteracijnij pereglyad usih vuzliv Oskilki z dovilnogo vuzla mozhna potrapiti do bilshe nizh odnogo mozhlivogo nastupnogo vuzla oskilki ce ne linijna struktura danih to pripuskayuchi poslidovne obchislennya ne paralelne deyaki vuzli povinni buti vidkladeni tobto zberezheni yakimos chinom dlya podalshogo vidviduvannya Ce chasto robitsya z vikoristannyam takih struktur yak stek LIFO abo cherga FIFO Oskilki derevo ye strukturoyu danih yaka viznachena rekursivno to obhid mozhe buti viznachenij za dopomogoyu rekursiyi abo sho ye bilsh vitonchenim korekursiyi u prirodnij i zrozumilij sposib pri vikoristanni rekursiyi vidkladeni vuzli neyavno zberigayutsya u steci viklikiv Poshuk vglib legko realizuyetsya cherez stek v tomu chisli rekursivno cherez stek viklikiv todi yak poshuk vshir legko realizuyetsya cherez chergu v tomu chisli korekursiyu Poshuk vglib u dvijkovomu derevi Dokladnishe Poshuk u glibinu Takij poshuk nazivayutsya poshukom vglib angl depth first search DFS oskilki po derevu poshuku prosuvayutsya maksimalno gliboko dlya kozhnogo nashadka pered tim yak perejti do nastupnogo brata Dlya dvijkovogo dereva voni viznachayutsya yak operaciyi dostupu na kozhnomu vuzli pochinayuchi z potochnogo vuzla algoritm yakogo takij Zagalnij rekursivnij pidhid dlya obhodu dvijkovogo dereva takij Spustitsya na odin riven do rekursivnogo argumentu N Yaksho N isnuye tobto ne ye porozhnim to vikonuyutsya nastupni tri operaciyi u pevnomu poryadku L Rekursivno obijti dlya N live pidderevo R Rekursivno obijti dlya N prave pidderevo N Obrobiti potochnij vuzol N Povernutisya pidnyavshis na odin riven i pributi do batkivskogo vuzla N U prikladah zdebilshogo L vikonuyetsya pered R Ale mozhlive vikonannya R pered L div RNL Obhid dereva vglib pryamij chervonij F B A D C E G I H zvorotnij zelenij A C E D B H I G F seredinnij zhovtij A B C D E F G H I Isnuyut tri vidi takih obhodiv kozhnij z yakih viznachayetsya rekursivno pryamij poryadok NLR angl preorder nastupnoyi poslidovnosti vidvidati korin vidvidati live pidderevo vidvidati prave pidderevoTobto v takomu poryadku obhodu kozhna vershina vidviduyetsya do togo yak budut vidvidani yiyi diti zvorotnij poryadok LRN angl postorder nastupnoyi poslidovnosti vidvidati live pidderevo vidvidati prave pidderevo vidvidati korinTobto v takomu poryadku kozhna vershina vidviduyetsya lishe pislya togo yak budut vidvidani yiyi diti seredinnij centrovanij poryadok LNR angl inorder nastupnoyi poslidovnosti vidvidati live pidderevo vidvidati korin vidvidati prave pidderevoV takomu poryadku kozhna vershina vidviduyetsya mizh vidvidannyam livoyi ta pravoyi ditini Takij poryadok osoblivo chasto zastosovuyetsya v binarnih derevah poshuku tomu sho daye mozhlivist obhodu vershin u poryadku zbilshennya yihnih poryadkovih nomeriv PrikladDlya cogo binarnogo dereva Pryamij poryadok 2 7 2 6 5 11 5 9 4 Zvorotnij poryadok 2 5 11 6 7 4 9 5 2 seredinnij centrovanij poryadok 2 7 5 6 11 2 5 4 9Div takozhDerevo struktura danih Model vkladenih mnozhin Spisok algoritmiv Poshuk v glibinu Poshuk u shirinuPrimitki Arhiv originalu za 5 serpnya 2018 Procitovano 2 travnya 2015 PDF Arhiv originalu PDF za 28 serpnya 2017 Procitovano 25 zhovtnya 2020 a href wiki D0 A8 D0 B0 D0 B1 D0 BB D0 BE D0 BD Cite web title Shablon Cite web cite web a Obslugovuvannya CS1 Storinki z tekstom archived copy yak znachennya parametru title posilannya Arhiv originalu za 11 kvitnya 2019 Procitovano 2 travnya 2015 Vstup do algoritmiv 2019 s 302 LiteraturaT Kormen Ch Lejzerson R Rivest K Stajn 2009 1990 Vstup do algoritmiv vid 3rd MIT Press i McGraw Hill ISBN 0 262 03384 4