A altura de uma árvore binária é a distância do nó raiz ao filho do nó que está mais distante da raiz.
Abaixo está um exemplo:
2 <-- root: Height 1
/ \
7 5 <-- Height 2
/ \ \
2 6 9 <-- Height 3
/ \ /
5 11 4 <-- Height 4
Altura da árvore binária: 4
Definição de uma árvore binária
Uma árvore é um objeto que contém um valor inteiro assinado e duas outras árvores ou ponteiros para eles.
A estrutura da estrutura da árvore binária é semelhante à seguinte:
typedef struct tree
{
struct tree * l;
struct tree * r;
int v;
} tree;
O desafio:
Entrada
A raiz de uma árvore binária
Resultado
O número que representa a altura de uma árvore binária
Supondo que você receba a raiz de uma árvore binária como entrada, escreva o programa mais curto que calcula a altura de uma árvore binária e retorna a altura. O programa com menos quantidade de bytes (espaços em branco de contabilidade) vence.
code-golf
binary-tree
T. Salim
fonte
fonte
h
. Talvez seja melhor definir uma estrutura específica feita apenas de listas para o objetivo deste desafio.[root_value, left_node, right_node]
que cada umaleft_node
eright_node
também são árvores binárias aceitáveis? Será trivial em muitos idiomas, mas poderá ser divertido em alguns outros.a tree is an object that contains a value and either two other trees or pointers to them
. Uma definição que inclua idiomas sem objetos também seria boa.Respostas:
Gelatina , 3 bytes
Um link monádico que aceita uma lista que representa a árvore:,
[root_value, left_tree, right_tree]
onde cada umaleft_tree
eright_tree
são estruturas semelhantes (vazias, se necessário), que produzem a altura.Experimente online!
Quão?
Bastante trivial em Jelly:
fonte
x
vez de[x, [], []]
...Python 2 ,
3533 bytesAgradecimentos a Arnauld por perceber e supervisionar 4.
Uma função recursiva que aceita uma lista que representa a árvore:,
[root_value, left_tree, right_tree]
onde cada umaleft_tree
eright_tree
são estruturas semelhantes (vazias, se necessário), que retornam a altura.Experimente online!
Observe que
[]
retornaráFalse
, mas em PythonFalse==0
.fonte
Haskell, 33 bytes
Usando o tipo de árvore customizada
data T = L | N T T Int
, que é o equivalente Haskell da estrutura C fornecida no desafio.Experimente online!
fonte
Perl 6 , 25 bytes
Entrada é uma lista de 3 elementos
(l, r, v)
. A árvore vazia é a lista vazia.Experimente online!
Explicação
Solução antiga, 30 bytes
Experimente online!
fonte
&?BLOCK
truque é interessante, mas são alguns bytes mais curtos para atribuir o bloco a $!$!
ou$/
parece trapaça para mim.05AB1E ,
1175 bytes-4 bytes graças a @ExpiredData .
-2 bytes graças a @Grimy .
O formato de entrada é semelhante ao da resposta Jelly: uma lista que representa a árvore:,
[root_value, left_tree, right_tree]
onde cada umaleft_tree
eright_tree
são estruturas semelhantes (opcionalmente vazias). Ou seja,[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
representa a árvore a partir da descrição do desafio.Experimente online ou verifique mais alguns casos de teste .
Explicação:
Observe que, embora 05AB1E seja baseado em 0, o loop de alterações
Δ
faz com que o índice de saída esteja correto, pois precisa de uma iteração adicional para verificar se não muda mais.fonte
JavaScript (ES6),
3533 bytesEstrutura de entrada:
[[left_node], [right_node], value]
Experimente online!
Comentado
fonte
a&&-~
.C, 43 bytes
Estrutura da árvore binária é a seguinte:
fonte
JavaScript (Node.js) , 32 bytes
Experimente online!
Usar o nome emflat
vez deflatten
ousmoosh
é uma ótima idéia para o código de golfe.Usando
[]
para nó nulo na árvore e[left, right, value]
para nós.value
aqui é um número inteiro.fonte
Wolfram Language (Mathematica) , 10 bytes
Experimente online! Recebe entrada como uma lista aninhada
{v, l, r}
.fonte
2[7[2,6[5,11]],5[9[4,],]]
é uma representação válida da árvore,Depth
funcionaHaskell, 28 bytes
Usando a seguinte definição de dados:
A altura é:
fonte
Esquema, 72 bytes
Versão mais legível:
Usando listas do formulário (dados, esquerda, direita) para representar uma árvore. Por exemplo
Experimente Online!
fonte
R , 51 bytes
Experimente online!
Entrada: uma lista aninhada no formato:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
Algoritmo: Nivela a árvore iterativamente em um nível até que se torne um vetor plano: a contagem de iterações corresponde à profundidade máxima.
Inspirado na solução @KevinCruijssen
Alternativa recursiva:
R , 64 bytes
Experimente online!
Redefine a função / operador,
'~'
permitindo calcular a profundidade máxima de uma árvore armazenada em uma estrutura de lista.A estrutura da lista de uma árvore está no formato:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
fonte
d=1
e depoisd-1
no final? Você não poderia começar em0
?>
para~
aqui para que os casos de teste sejam mais fáceis de inserirJaponês , 8 bytes
Tente
Original, 9 bytes
Tente
fonte
K (ngn / k) , 4 bytes
Solução:
Experimente online!
Explicação:
Eu acho que posso ter entendido errado.
Representando uma árvore como a lista de 3 itens (nó pai; filho esquerdo; filho direito), o exemplo pode ser representado como
ou:
(2;(7;(,2);(6;(,5);(,11)));(5;();(9;(,4);())))
.Portanto, a solução é achatar iterativamente e contar as iterações:
fonte
Carvão , 29 bytes
Experimente online! Link é a versão detalhada do código. Modifica temporariamente a árvore durante o processamento. Explicação:
Empurre zero para o nó raiz.
Envie o nó raiz para a lista de todos os nós.
Faça uma pesquisa pela primeira vez da árvore.
Obtenha a profundidade desse nó.
Faça um loop sobre qualquer nó filho.
Diga ao nó filho a profundidade do pai e envie-o para a lista de todos os nós.
Uma vez percorridos todos os nós, imprima a profundidade do último nó. Como a travessia foi a primeira da largura, essa será a altura da árvore.
fonte
Stax , 5 bytes
Execute e depure
Stax não tem ponteiros nem valores nulos, então eu represento a entrada como
[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
. Talvez seja uma vantagem injusta, mas foi a mais próxima que pude chegar.Descompactado, não jogado e comentado, o código fica assim.
Execute este
fonte
Kotlin, 45 bytes
Supondo que a seguinte classe esteja definida
Experimente online
fonte
Julia, 27 bytes
Com a seguinte estrutura representando a árvore binária:
c
é uma tupla que representa os nós esquerdo e direito e a tupla vazia()
é usada para sinalizar a ausência de um nó.fonte
Kotlin , 42 bytes
Experimente online!
Onde
fonte