Я хотел напечатать двоичное дерево, создав матрицу на основе координат, которые будут иметь соответствующие узлы в дереве. Бинарное дерево сбалансировано, и для каждого узла следует, что узлы слева меньше его, а узлы справа больше его.
Мое дерево представлено структурой 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]).
Для этого примера желаемая матрица будет:
Пример матрицы
, где я поставил символ '' - там, где есть пробелы, чтобы добиться печати желаемым образом.
Есть ли способ закодировать функцию, которая будет генерировать эту матрицу?