Сведение m-арного дерева к бинарному



Неформальный алгоритм:

1.В любом узле дерева отсекаются все ветви, кроме крайней левой, соответствующей старшим сыновьям.

2.Соединяется горизонтальными линиями все сыновья одного родителя.

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

Обходы бинарных деревьев и леса

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

 Приведем рекурсивные процедуры КЛП-, ЛКП- и ЛПК-обходов, прямо соответствующие их рекурсивным определениям (операция обработки узла обозначена как «посетить (узел)»):

 

procedure обходКЛП (b: BTree); {прямой}

begin

if not Null (b) then

begin

посетить (Root (b));

обходКЛП (Left (b));

обходКЛП (Right (b));

end

end{обходКЛП};

procedure обходЛКП (b: BTree);{обратный}

 begin

if not Null (b) then

begin

  обходЛКП (Left (b));

  посетить (Root (b));

  обходЛКП (Right (b));                                                    

end

 end{обходЛКП};

procedure обходЛПК (b: BTree);{концевой}

begin

if not Null (b) then

begin

  обходЛПК (Left (b));

  обходЛПК (Right (b));

  посетить ( Root (b));

end

end{обходЛПК}

 

В литературе используется различная терминология при именовании видов обхода бинарного дерева. Перечислим наиболее популярные варианты терминологии (виды обходов перечислены во всех вариантах в одной и той же последовательности):

1) КЛП, ЛКП, ЛПК;

2) прямой, обратный, концевой;

3) прямой, симметричный, обратный;

4) сверху вниз, слева направо, снизу вверх6];

5) префиксный, инфиксный, постфиксный.

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

Иногда обход КЛП называют обходом в глубину. В варианте 2 названия обходам даны соответственно тому, что в КЛП-порядке корень посещается перед посещением узлов левого поддерева (прямой порядок), а в ЛКП-порядке корень посещается после обхода узлов левого поддерева (обратный порядок). В ЛПК-порядке корень посещается после обхода узлов левого и правого поддеревьев (концевой порядок).

 

Нерекурсивные процедуры обхода бинарных деревьев

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

1.В качестве очередной вершины взять корень дерева. Перейти к п.2.

2.Произвести обработку очередной вершины в соответствии с задачей. Перейти к п.3.

3.а) Если очередная вершина имеет обе ветви, то в качестве новой очередной вершины, выбрать ту вершину, на которую ссылается левая ветвь, а вершину на которую ссылается правая ветвь, поставить в очередь. Перейти к п.2.

б) Если очередная вершина является конечной, то в качестве новой очередной вершины выбрать вершину из очереди, если она не пуста, и перейти к п.2.; если очередь пуста, то это означает, что обход всего дерева окончен, перейти к п.4.

в) Если очередная вершина имеет только одну ветвь, то в качестве новой очередной вершины, выбрать ту вершину, на которую эта ветвь указывает, перейти к п.2.

4. Конец алгоритма.

Обходы леса

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

Прямой порядок:

а) посетить корень первого дерева;

б) пройти поддеревья первого дерева (в прямом порядке);

в) пройти оставшиеся деревья (в прямом порядке).

Обратный порядок:

а) пройти поддеревья первого дерева (в обратном порядке);

б) посетить корень первого дерева;

в) пройти оставшиеся деревья (в обратном порядке).

Концевой порядок:

а) пройти поддеревья первого дерева (в концевом порядке);

б) пройти оставшиеся деревья (в концевом порядке);

в) посетить корень первого дерева.


Дата добавления: 2018-05-02; просмотров: 625; Мы поможем в написании вашей работы!

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






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