Печать двоичного дерева в Прологе на основе матрицы - PullRequest
0 голосов
/ 06 мая 2020

Я хотел напечатать двоичное дерево, создав матрицу на основе координат, которые будут иметь соответствующие узлы в дереве. Бинарное дерево сбалансировано, и для каждого узла следует, что узлы слева меньше его, а узлы справа больше его.

Мое дерево представлено структурой s (L, K, D), где L обозначает левую ветвь N узел, а D правую ветвь. Когда дело доходит до конца, дерево заканчивается нулевым значением. Например, простое дерево с 1 в качестве первого узла и 2 и 3 его левым и правым узлами будет представлено как s (s (nil, 2, nil), 1, s (nil, 3, nil)).

Пример двоичного дерева

В этом примере узел 7 будет иметь координаты (3,2). 2, потому что это его глубина в двоичном дереве (считая от 0), и 3 из-за его индекса в монотонно увеличивающемся списке узлов дерева. (Список равен [1,2,3,7 ...]) .

В принципе, я могу упаковать дерево в матрицу размеров NxM (N - количество узлов, а M - абсолютная глубина дерева [в данном случае 3]).

Для этого примера желаемая матрица будет:

Пример матрицы

, где я поставил символ '' - там, где есть пробелы, чтобы добиться печати желаемым образом.

Есть ли способ закодировать функцию, которая будет генерировать эту матрицу?

...