Обычно первая строка, отводимая под изображение дерева, содержит его корень и помечается слева числом 0 (нулевой уровень дерева). Единственная ситуация, когда это правило нарушается, связана с ошибочным формированием бинарного дерева с обратной связью в случае, если поле Parent корня не содержит значение nil. В этой ситуации перед строкой с изображением корня дерева помещается еще одна строка, в которой над корнем изображается красная звездочка -- признак ошибки.
Изображение дерева может также содержать строки, расположенные ниже последнего уровня; эти строки могут потребоваться для вывода имен указателей, связанных с вершинами-листьями, расположенными на последнем уровне, а также для вывода звездочек, отмечающих ошибочные ссылки Left или Right для вершин, расположенных на последнем уровне дерева. Заметим, что ссылка считается ошибочной в двух случаях:
если она содержит неверный адрес, если она ссылается на вершину, которую нельзя отобразить, поскольку для этой вершины не предусмотрено экранного места.
В частности, звездочки обязательно будут выведены при попытке отобразить на экране дерево с количеством вершин, превышающим 18.
Приведем примеры изображений линейных списков и деревьев. В этих примерах предполагается, что в качестве текущего языка задачника выбран язык Pascal; для других языков вместо nil используются обозначения нулевых указателей или нулевых объектов -- (см. описание процедуры SetObjectStyle), соответствующие этим языкам.
Пример 1
P 1
24 - 23 >nil
Первый элемент данного списка связан с указателем P 1; список содержит два элемента и является односвязным : на это указывает символ -" между элементами, означающий, что поле Next первого элемента (со значением 24) указывает на второй элемент (со значением 23). Поле Next второго элемента равно nil.
Пример 2
P 1P 2
nil< 14 = 23 = 34 >nil
Данный список является двусвязным (двойная связь, использующая оба поля связи -- Next и Prev, -- обозначается знаком ="), причем в задании с этим списком связаны два указателя: P 1указывает на его первый, а P 2-- на его последний элемент.
Пример 3
P 0
<< = 15 - 23 = 34 = >>
Данный список является двусвязным циклическим списком (на его цикличность указывают символы <<" и ">>"), однако одна из его связей отсутствует. А именно, элемент 23 (на который указывает указатель P 0) не связан с предыдущим элементом 15, т. е. поле Prev элемента 23 содержит ошибочное значение (например, равно nil). При правильно разработанном задании подобная ситуация может возникнуть только для ошибочных списков, созданных в программе учащегося. Заметим, что связь в другом направлении (от 15 к 23) имеется, т. е. поле Next элемента 15 указывает на элемент 23.
Пример 4
P XP Y
95 - 63 -.34.- >>
Данный список является односвязным циклическим списком. Он имеет две особенности. Во-первых, на элемент 95 указывают сразу два указателя (P Xи P Y), и, во-вторых, элемент 34 должен быть размещен в памяти процедурой New при выполнении задания (на это указывают обрамляющие его точки). Подобные элементы, естественно, могут содержаться только в результирующих списках. Они определяются с помощью процедуры SetNewNode.
Пример 5

Так выглядит на экране бинарное дерево глубины 4. С корнем этого дерева (поле Data которого равно 96) связан указатель P 1.
Пример 6

Так выглядит на экране бинарное дерево с обратной связью (номера уровней на данной иллюстрации не указаны).
Пример 7

Так выглядит на экране дерево общего вида (номера уровней и имена связанных с деревом указателей на данной иллюстрации не указаны). В данном случае корень дерева 13 имеет три непосредственных потомка: вершины 71, 73 и 29. Напомним, что в дереве общего вида поле Left определяет первую (левую) дочернюю вершину, а поле Right -- очередную (правую) вершину- сестру .
Пример 8

Читать дальше