Напишите программу, которая принимает двоичное дерево в качестве входных данных и выводит самый глубокий узел и его глубину. Если есть связь, выведите все задействованные узлы, а также их глубины. Каждый узел представлен как:
T(x,x)
T(x)
T
где T
- идентификатор одного или нескольких буквенно-цифровых символов, а каждый x
- другой узел.
Вот простое определение двоичного дерева:
- Во главе двоичного дерева находится узел.
- Узел в двоичном дереве имеет не более двух дочерних элементов.
Например, вход A(B(C,D(E)))
(ниже) будет выводить 3:E
.
В то время как следующее дерево является трехсторонней связью между 5, 11 и 4, а их глубина также равна 3 (начиная с 0):
Вход 2(7(2,6(5,11)),5(9(4)))
(ниже) будет выводить 3:5,11,4
.
Это код гольф, поэтому выигрывает самый короткий код в байтах.
code-golf
binary-tree
Jwosty
источник
источник
Ответы:
CJam,
4947источник
Haskell, 186 байт
Полная программа, принимает дерево
stdin
, создает специальный формат выводаstdout
:Руководство по клюшке для гольфа (добавлены лучшие имена, сигнатуры типов, комментарии и некоторые подвыражения, извлеченные и названные - но в остальном тот же код; версия, не относящаяся к гольфу, не будет связывать взлом узлов с нумерацией или поиск самой глубокой с форматированием вывода.) :
источник
GolfScript (75 символов)
Не особенно конкурентоспособный, но достаточно искривленный, что вызывает некоторый интерес:
Код имеет три этапа. Сначала мы предварительно обработаем входную строку:
Мы преобразовали, например,
A(B(C,D(E)))
в'A'^('B'^('C'^'D'^('E'^)''^)''^)
. Если мы назначим подходящий блок,^
мы можем выполнить полезную обработку, используя~
для оценки строки.Во-вторых, мы находим максимальную глубину:
Наконец, мы выбираем самые глубокие узлы и строим вывод:
источник
Perl 5 - 85
Пожалуйста, не стесняйтесь редактировать этот пост, чтобы исправить количество символов. Я использую
say
функцию, но я не знаю о флагах, чтобы она работала правильно без объявленияuse 5.010;
.Демо на Ideone
Вывод разделен пробелом, а не запятыми.
Код просто использует рекурсивное регулярное выражение для удаления корня деревьев в лесу, пока это невозможно сделать. Тогда строка перед последним будет содержать все листовые узлы на самом глубоком уровне.
Пробные прогоны
источник
VB.net
Предположение: Узел Значение не может содержать
,
,(
,)
источник
Javascript (E6) 120
Итерационная версия
Неуправляемый и проверяемый
Тест в консоли Firefox:
Вывод
источник