Обход деревьев с помощью стека

 

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

Procedure PechPrSt(T: ukaz);

Type

point=^stek;

stek=record

Ver: ukaz;

Next: point;

Ns: integer { номер сына, по которому пошли вниз }

end;

Var

Top, Kon: point;

K: ukaz;

Procedure Dob(P: ukaz);

Begin

New(kon);

Kon^.Ver:=P;

Kon^.Next:=Top;

Kon^.Ns:=0;

Top:=Kon;

End;

Procedure Udal;

Begin

Kon:=Top;

Top:=Top^.Next;

Dispose(Kon);

End;

Begin { начало процедуры PechPrSt }

Top:=Nil;

K:=T;

Dob(K); { занесение в стек корня }

WriteLn('Вершина ', Top^.Ver^.Key);

While Top<>Nil do

begin

Top^.Ns:=Top^.Ns+1;

case Top^.Ns of

1: if Top^.Ver^.Left<>Nil then

begin

Dob(Top^.Ver^.Left);

WriteLn('Вершина ', Top^.Ver^.Key);

end;

2: if Top^.Ver^.Right<>Nil then

begin

Dob(Top^.Ver^.Right);

WriteLn('Вершина ', Top^.Ver^.Key);

end;

3: Udal

end

end

End;

Последовательность прохода по сыновьям обеспечивается счетчиком Ns. Номер вершины выдается на экран при первом посещении этой вершины, то есть при добавлении вершины в стек.

Для реализации обхода снизу вверх требуются незначительные изменения. Сейчас номер вершины нужно выдавать при последнем ее посещении, то есть перед удалением из стека. Аналогично, при обходе слева направо выдача должна быть после посещения первого (левого) сына.

 








Дата добавления: 2015-08-21; просмотров: 1360;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.