Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Алгоритм горизонтального обхода дерева

Рекурсия удобна при обходе деревьев, однако ей нельзя осуществить горизонтальный обход дерева. В этом случае, а так же при обеспокоенности перегрузкой программного стека, следует применять итерационный подход.

При обходе в ширину узлы посещаются уровень за уровнем(N-й уровень дерева - множество узлов с высотой N). Каждый уровень обходится слева направо. Для дерева изображенного на рисунке 1.2 обход в ширину представляет последовательность вершин:

A- B –C – D – E – F – K - G

И графически (рисунок 2.4):

А
B
F
D
G
E
C
K
Рисунок 2.4

Заметим, что перечисление узлов происходит в порядке удаления от корня, что делает поиск в ширину удобным, например, для поиска узла дерева со значением k, наиболее близкого к корню, и т.д.

Для реализации используется структура queue - очередь с методами

enqueue - поставить в очередь

dequeue - взять из очереди

empty - возвращает TRUE, если очередь пуста, иначе – FALSE.

И часть программного кода для данного обхода будет соответственно иметь вид:

/*ОБХОД В ШИРИНУ*/

q.enqueue(root); // корень в очередь

while (! q.empty) {

der = q.dequeue();

visit der; // посетить der

if (! der.left.empty) // der.left - левое поддерево

q.enqueue(der.left);

if (! der.right.empty) // der.right - правое поддерево

q.enqueue(der.right);}

 


<== предыдущая страница | следующая страница ==>
Бинарные деревья | Алгоритм вертикального обхода дерева

Дата добавления: 2015-07-26; просмотров: 415; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.002 сек.