Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 12
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 25
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 25
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 26
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 26
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 27
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 27
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 28
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 28
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 29
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 25
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 25
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 26
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 26
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 27
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 27
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 28
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 28
Deprecated: Function eregi() is deprecated in /home/codingr/sites/codingrus.ru/maincore.php on line 29
.:: CodingRUS ::. программирование по-русски на Delphi, C++, PHP, Prolog, GPSS
Алгоритмы обхода бинарных деревьев и их применение в трансляции программ и обработке данных + Код Pascal
Прислано Kest на February 05 2010 16:49:40
Многие алгоритмы, использующие бинарные деревья, включают два этапа. На первом этапе строится бинарное дерево, а на втором выполняется систематический обход его вершин. Наиболее часто используются следующие способы обхода вершин дерева:
1) Обход в прямом порядке (просмотр в глубину).
2) Обход в обратном порядке.
3) Симметричный обход (обход во внутреннем порядке).
Все три способа описываются рекурсивными алгоритмами.
Бинарное дерево схематически можно представить следующим образом:

T – выделенная вершина – корень, L – левое поддерево, R – правое поддерево.
Тогда для прямого обхода используется алгоритм TLR. Он включает следующие шаги:
1) просмотр корня T
2) просмотр с помощью алгоритма TLR левого поддерева
3) просмотр с помощью алгоритма TLR правого поддерева
Обход в обратном порядке реализуется с помощью алгоритма LRT:
1) обход левого поддерева с помощью алгоритма LRT
2) обход правого поддерева с помощью алгоритма LRT
3) просмотр корня T
Симметричный обход реализуется с помощью алгоритма LTR:
1) просмотр левого поддерева с помощью алгоритма LTR
2) просмотр корня T
3) просмотр правого поддерева с помощью алгоритма LTR
Пример:

Прямой порядок: TLR: 1,2,4,5,8,9,3,6,10,7.
Обратный порядок: LRT: 4,8,9,5,2,10,6,7,3,1.
Симметричный порядок: LTR: 4,2,8,5,9,1,6,10,3,7.
Рассмотрим реализацию этих алгоритмов в программах. Пусть соответствующая процедура обхода вершин некоторого дерева T печатает метки этих вершин. INFO(i,T).
p – указатель на корень дерева
q – указатель на другую вершину
LEFT(i,T) – определение левого потомка вершины i в дереве T.
RIGHT(i,T) – определение правого потомка вершины i в дереве T.
Функции возвращают номер вершины.
INFO(i,T) – возвращает информацию, приписанную вершине i дерева T.
Procedure TLR (p:position);
Var q:position;
Begin
If p<>NIL then
Begin
write(INFO(p,T));
q:=LEFT(p,T); TLR(q);
q:=RIGHT(p,T); TLR(q);
end;
end;
Procedure LRT (p:position);
Var q:position;
Begin
If p<>NIL then
Begin
q:=LEFT(p,T); LRT(q); q:=RIGHT(p,T); LRT(q);
write(INFO(p,T));
end;
end;
Procedure LTR (p:position);
Var q:position;
Begin
If p<>NIL then
Begin
q:=LEFT(p,T); LTR(q); write(INFO(p,T));
q:=RIGHT(p,T); LTR(q); end;
end;