Натхненний останнім запитанням про SO ...
Напишіть функцію для друку двійкового дерева у такому форматі:
3
/ \
1 5
\ / \
2 4 6
- Вихід повинен складатися з рядка вузлів, за яким слід рядка
/
та\
символів, що вказують взаємозв'язки, а потім лінії вузлів тощо. - Можна припустити, що всі вузли представлені як один символ.
- Суміжні вузли на найнижчому рівні повинні бути розділені щонайменше одним пробілом, вузли далі вгору повинні бути відокремлені відповідно.
- Вузли з двома дітьми повинні розміщуватися саме посередині їхніх прямих дітей.
- Штрихи для відносин повинні бути на півдорозі між батьком та відповідною дитиною (кругло, де ви хочете).
Вхід:
Вхід буде надано як аргумент вашої функції. Я не вказуватиму точну структуру дерева, однак воно повинно бути використане як власне бінарне дерево. Жодні "дерева не представлені в моїй програмі, оскільки рядки збігаються збігом випадків, як очікуваний вихід".
Ви можете надрукувати на вихідний потік або повернути рядок, що містить вихід, на ваш вибір.
Бали за найкоротший код, але я б більше віддав перевагу повністю працюючому довгому рішенню, ніж короткий короткий на 90%.
Оновлення для винагороди:
Щодо щедрості, я (оптимізатор) вношу незначні зміни:
- Вхід може бути з STDIN, ARGV або аргументу функції.
- Вихідні дані повинні бути STDOUT (або
console.log
для JS) - Можна припустити, що введення знаходиться у вигляді масиву, наприклад,
[1,2,3]
або[1 2 3]
Оновлення 2 - Бінарне дерево насправді має бути двійковим деревом пошуку. Оскільки я не згадував про це спочатку, я дозволю користувачам трактувати перетворення звичайного масиву у масив двійкового пошуку дерева як окрему програму, і остаточне число байтів буде лише для програми, яка приймає масив як аргумент та друкує його як бінарне дерево.
30000,1000,499999