а) Обычное изображение



Рисунок 9. 16.    (а)     Обычное изображение дерева.     (b)    То же дерево,
отпечатанное процедурой отобр (дуги добавлены для ясности).


Давайте определим процедуру

        отобр( Т)

так, чтобы она отображала дерево в форме, показанной на Рисунок 9.16. Принцип работы этой процедуры:

line();

Для того, чтобы отобразить непустое дерево Т, необходимо:

(1)        отобразить правое поддерево дерева Т с отступом вправо на расстояние Н;

(2)        отпечатать корень дерева Т;

(3)        отобразить левое поддерево дерева Т с отступом вправо на расстояние Н.

line();

Величина отступа Н, которую можно выбирать по желанию, - это дополнительный параметр при отображении деревьев. Введем процедуру

        отобр2( Т, Н)

печатающую дерево Т с отступом на Н пробелов от левого края листа. Связь между процедурами отобр и отобр2 такова:

        отобр( Т) :- отобр2( Т, 0).



На Рисунок 9.17 показана программа целиком. В этой программе предусмотрен сдвиг на 2 позиции для каждого уровня дерева. Описанный принцип отображения можно легко приспособить для деревьев других типов.

line();

        отобр( Т) :-
                отобр2( Т, 0).

        отобр2( nil, _ ).

        отобр2( дер( L, X, R), Отступ) :-
                Отступ2 is Отступ + 2,
                отобр2( R, Отступ2),
                tab( Отступ), write( X), nl,
                отобр( L, Отступ2).

line();



Содержание раздела