Вдохновленный недавним вопросом о SO ...
Напишите функцию для печати двоичного дерева в следующем формате:
3
/ \
1 5
\ / \
2 4 6
- Вывод должен состоять из строки узлов, за которой следуют строка
/
и\
символы, обозначающие отношения, за которыми следует строка узлов и т. Д. - Вы можете предположить, что все узлы представимы как один символ.
- Соседние узлы на самом низком уровне должны быть разделены хотя бы одним пробелом, узлы, расположенные дальше, должны быть разделены соответствующим образом
- Узлы с двумя детьми должны быть расположены точно посередине их прямых детей.
- Косая черта в отношениях должна быть на полпути между родителем и соответствующим ребенком (в зависимости от того, что вы хотите).
Входные данные:
Входные данные будут предоставлены в качестве аргумента вашей функции. Я не буду указывать точную структуру дерева, однако оно должно использоваться как фактическое двоичное дерево. Никакие «деревья не представлены в моей программе как строки, совпадающие с ожидаемым результатом».
Вы можете распечатать в выходной поток или вернуть строку, содержащую вывод, на ваш выбор.
Очки за самый короткий код, но я бы предпочел полностью работающее длинное решение, чем 90% работающее короткое.
Обновление для награды:
Для награды я (Оптимизатор) делаю небольшие изменения:
- Ввод может быть из STDIN, ARGV или аргумента функции.
- Вывод должен быть на STDOUT (или
console.log
для JS) - Вы можете предположить, что ввод в виде массива, например.
[1,2,3]
или[1 2 3]
Обновление 2 - двоичное дерево на самом деле должно быть двоичным деревом поиска. Поскольку я не упомянул об этом изначально, я позволю пользователям рассматривать преобразование обычного массива в массив бинарного дерева поиска как отдельную программу, и окончательный счетчик байтов будет только для программы, которая примет массив в качестве аргумента и напечатает его как двоичное дерево.
30000,1000,499999