Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy_k_ekzamenu_po_AiSD.docx
Скачиваний:
42
Добавлен:
29.04.2019
Размер:
417.06 Кб
Скачать

40. Нерекурсивный алгоритм обхода дерева в прямом порядке

Пусть T – указатель на бинарное дерево; А – стек, в который заносятся адреса еще не пройденных вершин; TOP – вершина стека; P – рабочая переменная.

  1. Начальная установка: TOP:=0; P:=T.

  2. Если P=nil, то перейти на 4. {конец ветви}

  3. Вывести P^.info. Вершину заносим в стек: TOP:=TOP+1; A[TOP]:=P; шаг по левой ветви: P:=P^.llink; перейти на 2.

  4. Если TOP=0, то КОНЕЦ.

  5. Достаем вершину из стека: P:=A[TOP]; TOP:=TOP-1; Шаг по правой связи: P:=P^.rlink; перейти на 2.

Реализация нерекурсивного алгоритма поиска может выглядеть следующим образом:

Function Locate(x: integer; T: Link):Link; var found: boolean; begin found:= false; while (T <> nil) and not found do if T^.elem = x then found := true else if T^.elem > x then T:=T^. left else T:=T^.right; Locate := T end;

Для упрощения процедуры поиска можно использовать дерево с узлом-барьером (последний пустой узел z, в который засылается элемент для поиска x)

function Locate(x: integer; T: Link):Link; begin z^.elem:=x; while T^.elem <> x do if T^.elem > x then T:=T^. left else T:=T^.right; Locate := T end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]