Высота бинарного дерева - это расстояние от корневого узла до дочернего узла, который находится дальше всего от корня.
Ниже приведен пример:
2 <-- root: Height 1
/ \
7 5 <-- Height 2
/ \ \
2 6 9 <-- Height 3
/ \ /
5 11 4 <-- Height 4
Высота бинарного дерева: 4
Определение двоичного дерева
Дерево - это объект, который содержит целочисленное значение со знаком и два других дерева или указатели на них.
Структура структуры двоичного дерева выглядит примерно так:
typedef struct tree
{
struct tree * l;
struct tree * r;
int v;
} tree;
Соревнование:
вход
Корень бинарного дерева
Выход
Число, представляющее высоту двоичного дерева
Предполагая, что вам дан корень двоичного дерева в качестве входных данных, напишите самую короткую программу, которая вычисляет высоту двоичного дерева и возвращает высоту. Программа с наименьшим количеством байтов (учет пробелов) выигрывает.
code-golf
binary-tree
Т. Салим
источник
источник
h
. Возможно, для этой задачи лучше определить конкретную структуру, состоящую только из списков.[root_value, left_node, right_node]
котором допустимо каждое из двоичных деревьев,left_node
аright_node
также? Это будет тривиально на многих языках, но может быть забавным на некоторых других.a tree is an object that contains a value and either two other trees or pointers to them
. Определение, включающее языки без объектов, также было бы неплохо.Ответы:
Желе , 3 байта
Монадическая ссылка, принимающая список, представляющий дерево:,
[root_value, left_tree, right_tree]
где каждая изleft_tree
иright_tree
является похожими структурами (пустые, если необходимо), которая возвращает высоту.Попробуйте онлайн!
Как?
Довольно тривиально в желе:
источник
x
вместо того , чтобы[x, [], []]
...Python 2 ,
3533 байтаСпасибо Арно за то, что он заметил недосмотр и спасение 4.
Рекурсивная функция, принимающая список, представляющий дерево:,
[root_value, left_tree, right_tree]
где каждая изleft_tree
иright_tree
является похожей структурой (пустой, если необходимо), которая возвращает высоту.Попробуйте онлайн!
Обратите внимание, что
[]
вернетсяFalse
, но в PythonFalse==0
.источник
Haskell, 33 байта
Использование пользовательского типа дерева
data T = L | N T T Int
, который является эквивалентом языка Haskell структуры C, указанной в задании.Попробуйте онлайн!
источник
Perl 6 , 25 байт
Ввод 3-элементный список
(l, r, v)
. Пустое дерево - это пустой список.Попробуйте онлайн!
объяснение
Старое решение, 30 байт
Попробуйте онлайн!
источник
&?BLOCK
Трюк интересно , но это несколько байт короче , чтобы назначить блок $!$!
или$/
для меня, как мошенничество.05AB1E ,
1175 байт-4 байта благодаря @ExpiredData .
-2 байта благодаря @Grimy .
Формат ввода аналогичен ответу Jelly: список, представляющий дерево:,
[root_value, left_tree, right_tree]
где каждая изleft_tree
иright_tree
представляет собой схожие структуры (необязательно пустые). Т.е.[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
представляет дерево из описания вызова.Попробуйте онлайн или проверьте еще несколько тестов .
Объяснение:
Обратите внимание, что хотя 05AB1E основано на 0, цикл изменений
Δ
приводит к корректности выходного индекса, поскольку ему требуется дополнительная итерация для проверки того, что он больше не изменяется.источник
JavaScript (ES6),
3533 байтаСтруктура ввода:
[[left_node], [right_node], value]
Попробуйте онлайн!
комментарии
источник
a&&-~
.C, 43 байта
Структура бинарного дерева следующая:
источник
JavaScript (Node.js) , 32 байта
Попробуйте онлайн!
Используя имяflat
вместоflatten
илиsmoosh
является отличной идеей для кода гольф.Используется
[]
для нулевого узла в дереве и[left, right, value]
для узлов.value
здесь целое числоисточник
Wolfram Language (Mathematica) , 10 байт
Попробуйте онлайн! Принимает ввод как вложенный список
{v, l, r}
.источник
2[7[2,6[5,11]],5[9[4,],]]
является действительным представлением дерева,Depth
работаетHaskell, 28 байт
Используя следующее определение данных:
Высота составляет:
источник
Схема, 72 байта
Более читаемая версия:
Использование списков формы (данные, слева, справа) для представления дерева. Например
Попробуйте онлайн!
источник
R , 51 байт
Попробуйте онлайн!
Входные данные: вложенный список в формате:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
Алгоритм: итеративно выравнивает дерево на один уровень, пока оно не станет плоским вектором: количество итераций соответствует максимальной глубине.
Вдохновленный решением @KevinCruijssen
Рекурсивная альтернатива:
R , 64 байта
Попробуйте онлайн!
Переопределяет функцию / оператор,
'~'
позволяя вычислить максимальную глубину дерева, хранящегося в структуре списка.Структура списка дерева имеет формат:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
источник
d=1
а затемd-1
в конце? Не могли бы вы начать с0
?>
на~
здесь , так что тестовые примеры легче ввестиJapt , 8 байт
Попытайся
Оригинал, 9 байт
Попытайся
источник
К (нгн / к) , 4 байта
Решение:
Попробуйте онлайн!
Объяснение:
Я думаю, что, возможно, упустил момент.
Представляя дерево в виде списка из 3 элементов (parent-node; left-child; right-child), пример может быть представлен как
или:
(2;(7;(,2);(6;(,5);(,11)));(5;();(9;(,4);())))
.Таким образом, решение состоит в том, чтобы итеративно сгладить и посчитать итерации:
источник
Древесный уголь , 29 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Временно изменяет дерево во время обработки. Объяснение:
Нажмите ноль в корневой узел.
Нажмите корневой узел в список всех узлов.
Выполните поиск дерева в ширину.
Получите глубину этого узла.
Цикл по любым дочерним узлам.
Сообщите дочернему узлу глубину его родителя и поместите его в список всех узлов.
Когда все узлы пройдены, выведите глубину последнего узла. Поскольку обход был в ширину, это будет высота дерева.
источник
Stax , 5 байт
Запустите и отладьте его
Stax не имеет ни указателей, ни нулевых значений, поэтому я представляю ввод как
[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
. Может быть, это несправедливое преимущество, но это было самое близкое, что я мог получить.Распакованный, распакованный и прокомментированный код выглядит следующим образом.
Запустите этот
источник
Котлин, 45 байт
Предполагая, что следующий класс определен
Попробуйте онлайн
источник
Юлия, 27 байт
Со следующей структурой, представляющей двоичное дерево:
c
является кортежем, представляющим левый и правый узлы, и пустой кортеж()
используется, чтобы сигнализировать об отсутствии узла.источник
Котлин , 42 байта
Попробуйте онлайн!
где
источник