Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сиаод_ответы_16_79.doc
Скачиваний:
209
Добавлен:
11.05.2015
Размер:
7.84 Mб
Скачать

16. Обход n-арного дерева. Алгоритмы обхода n-арного дерева.

1)Прямой обход - Посещается корень дерева, затем все узлы левого поддерева, затем узлы след поддеревьев до правого (корень-лево-право).

2)Обратный обход - Сначала все узлы левого поддерева, затем последовательно узлы остальных поддеревьев в обратном порядке, последним посещается корень

(лево-прово-корень).

3)Симметричный обход – в симметричном порядке посещаются все узлы левого поддерева, потом корень, затем последовательно в симметричном порядке все узлы остальных поддеревьев (лево-корень-право).

Рекурсивный обход дерева(1)

Прямой:Preoder(n: узел);

1.Список обхода <- n(Обращение к узлу);

2.For каждого сына m-узла n в порядке слева направо doPreoder(m);( Рекурсивный обход левого поддерева. рекурсивный обход правого поддерева.)

Обратный: меняем местами пункты 1 и 2:

1. Рекурсивный обратный обход левого поддерева.

2.Рекурсивный обратный обход правого поддерева.

3. Обращение к узлу.

Симм. обход: Inorder(n: usel)

1.If n – list then заносим n в список обхода;

else begin

2.Inorder(самый левый сын узла n);

3.Список обхода <-n;

4.For каждого сына m узла n, исключая самого левого, в порядке слева направо do inorder(m) end;

1. Рекурсивный симметричный обход левого поддерева.

2. Обращение к узлу.

3. Рекурсивный симметричный обход правого поддерева.

Нерекурсивный а-м:

Используется стек, который хранит путь от корня до узла. Узел в вершине стека. (Обходим дерево слева направо)

Npreoder(T:tree)

S<-0/

M<-root(t)

While true do

If m<>nil then begin

{обр узел m}

push(m,s)

m<-left_child(m,T)

end else begin

if IsEmpty(S) then return;

m<-RightChild(Top(S),t)

pop(S); end

end

17.Бинарные деревья – основные определения, свойства и теоремы.

Бинарное дерево (деревья второй степени) – это конечное множество элементов (узлов), каждый из которых либо пуст (не связан с нижним уровнем, не имеет потомков, т.е. лист), либо является корнем (или узлом) с двумя различными бинарными поддеревьями – левым и правым.

Если каждый узел бинарного дерева, не являющийся листом, имеет не пустые правые и левые деревья, то дерево наз-ся строго бинарным. Строго бинарное дерево имеет (2n-1)-листов.Полное БДуровняn- это дерево, в котором каждый узел уровняnявл-ся листом и каждый узел уровня меньшеnимеет не пустые левые и правые поддеревья.

Почти полное БД– это БД, которое явл-ся полным вплоть до уровняk, а уровень (k+1)-заполнен слева направо. ППБД иногда наз-ся совершенными БД. ППБД при заданном количестве эл-ов БД будет иметь мин высоту.

Узлы располагаются по уровням. Корень - нулевой уровень и т.д. Максимальный уровень какого-либо элемента дерева называется его глубиной или высотой.

Основные операции:

1.Создать пустое БД

2.Включить узел в БД

3.Удалить узел из БД

4.Опр-ть пусто ли БД

5.Вып-ть поиск данных в БД

6.Обработать данные в узлах БД

7.Сохр-ть и восст-ть БД

8.Уничтожить БД.

Узлы определяются как переменные с фиксированной структурой, а связи между ними – с помощью динамических указателей. Ссылка на пустое поддерево обозначается, через Nil.