La altura de un árbol binario es la distancia desde el nodo raíz al nodo hijo que está más alejado de la raíz.
A continuación se muestra un ejemplo:
2 <-- root: Height 1
/ \
7 5 <-- Height 2
/ \ \
2 6 9 <-- Height 3
/ \ /
5 11 4 <-- Height 4
Altura del árbol binario: 4
Definición de un árbol binario
Un árbol es un objeto que contiene un valor entero con signo y otros dos árboles o punteros a ellos.
La estructura de la estructura del árbol binario se parece a la siguiente:
typedef struct tree
{
struct tree * l;
struct tree * r;
int v;
} tree;
El reto:
Entrada
La raíz de un árbol binario.
Salida
El número que representa la altura de un árbol binario.
Suponiendo que se le da la raíz de un árbol binario como entrada, escriba el programa más corto que calcule la altura de un árbol binario y devuelva la altura. El programa con la menor cantidad de bytes (espacios en blanco de contabilidad) gana.
code-golf
binary-tree
T. Salim
fuente
fuente
h
. Podría ser mejor definir una estructura específica hecha solo de listas para el propósito de este desafío.[root_value, left_node, right_node]
donde cada uno de los árboles binariosleft_node
yright_node
también son aceptables? Será trivial en muchos idiomas, pero puede ser divertido en otros.a tree is an object that contains a value and either two other trees or pointers to them
. Una definición que incluya lenguajes sin objetos también sería buena también.Respuestas:
Jalea , 3 bytes
A Enlace monádico aceptar una lista que representa el árbol:
[root_value, left_tree, right_tree]
, donde cada uno deleft_tree
yright_tree
son estructuras similares (vacía si es necesario), que da la altura.Pruébalo en línea!
¿Cómo?
Bastante trivial en gelatina:
fuente
x
lugar de[x, [], []]
...Python 2 ,
3533 bytesGracias a Arnauld por notar un descuido y ahorrar 4.
Una función recursiva aceptar una lista que representa el árbol:
[root_value, left_tree, right_tree]
, donde cada uno deleft_tree
yright_tree
son estructuras similares (vacío si es necesario), que devuelve la altura.Pruébalo en línea!
Tenga en cuenta que
[]
volveráFalse
, pero en PythonFalse==0
.fuente
Haskell, 33 bytes
Usando el tipo de árbol personalizado
data T = L | N T T Int
, que es el equivalente de Haskell de la estructura C dada en el desafío.Pruébalo en línea!
fuente
Perl 6 , 25 bytes
La entrada es una lista de 3 elementos
(l, r, v)
. El árbol vacío es la lista vacía.Pruébalo en línea!
Explicación
Solución anterior, 30 bytes
Pruébalo en línea!
fuente
&?BLOCK
truco es interesante, ¡pero es un par de bytes más corto para asignar el bloque a $!$!
o$/
me da ganas de hacer trampa05AB1E ,
1175 bytes-4 bytes gracias a @ExpiredData .
-2 bytes gracias a @Grimy .
El formato de entrada es similar a la respuesta jalea: una lista que representa el árbol:
[root_value, left_tree, right_tree]
, donde cada uno deleft_tree
yright_tree
son estructuras similares (opcionalmente vacío). Es decir,[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
representa el árbol de la descripción del desafío.Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
Tenga en cuenta que aunque 05AB1E está basado en 0, el bucle de cambios
Δ
hace que el índice de salida sea correcto, ya que necesita una iteración adicional para verificar que ya no cambie.fuente
JavaScript (ES6),
3533 bytesEstructura de entrada:
[[left_node], [right_node], value]
Pruébalo en línea!
Comentado
fuente
a&&-~
.C, 43 bytes
La estructura del árbol binario es la siguiente:
fuente
JavaScript (Node.js) , 32 bytes
Pruébalo en línea!
Usar el nombre enflat
lugar deflatten
osmoosh
es una gran idea para el golf de código.Utilizando
[]
para nodo nulo en el árbol y[left, right, value]
para nodos.value
Aquí hay un número entero.fuente
Wolfram Language (Mathematica) , 10 bytes
Pruébalo en línea! Toma la entrada como una lista anidada
{v, l, r}
.fuente
2[7[2,6[5,11]],5[9[4,],]]
es una representación válida del árbol,Depth
funcionaHaskell, 28 bytes
Usando la siguiente definición de datos:
La altura es:
fuente
Esquema, 72 bytes
Versión más legible:
Usar listas del formulario (datos, izquierda, derecha) para representar un árbol. P.ej
Pruébalo en línea!
fuente
R , 51 bytes
Pruébalo en línea!
Entrada: una lista anidada en el formato:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
Algoritmo: aplana iterativamente el árbol en un nivel hasta que se convierte en un vector plano: el recuento de iteraciones corresponde a la profundidad máxima.
Inspirado por solución @KevinCruijssen
Alternativa recursiva:
R , 64 bytes
Pruébalo en línea!
Redefine la función / operador
'~'
para que pueda calcular la profundidad máxima de un árbol almacenado en una estructura de lista.La estructura de la lista de un árbol está en el formato:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
fuente
d=1
y luegod-1
al final? ¿No podrías empezar0
?>
de~
aquí por lo que los casos de prueba son más fáciles de entradaJapt , 8 bytes
Intentalo
Original, 9 bytes
Intentalo
fuente
K (ngn / k) , 4 bytes
Solución:
Pruébalo en línea!
Explicación:
Creo que puedo haber perdido el punto.
Representando un árbol como la lista de 3 elementos (nodo principal; hijo izquierdo; hijo derecho), el ejemplo se puede representar como
o:
(2;(7;(,2);(6;(,5);(,11)));(5;();(9;(,4);())))
.Entonces, la solución es aplanar iterativamente y contar las iteraciones:
fuente
Carbón , 29 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Modifica temporalmente el árbol durante el procesamiento. Explicación:
Empuje cero al nodo raíz.
Empuje el nodo raíz a la lista de todos los nodos.
Realice una búsqueda amplia del árbol.
Obtenga la profundidad de este nodo.
Recorra cualquier nodo secundario.
Indique al nodo secundario la profundidad de su elemento primario y empújelo a la lista de todos los nodos.
Una vez que se hayan atravesado todos los nodos, imprima la profundidad del último nodo. Como el recorrido fue primero en anchura, esta será la altura del árbol.
fuente
Stax , 5 bytes
Ejecutar y depurarlo
Stax no tiene punteros ni valores nulos, por lo que represento la entrada como
[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
. Tal vez sea una ventaja injusta, pero fue lo más cerca que pude llegar.Desempaquetado, sin golf y comentado, el código se ve así.
Ejecute este
fuente
Kotlin, 45 bytes
Asumiendo que la siguiente clase está definida
Pruébalo en línea
fuente
Julia, 27 bytes
Con la siguiente estructura que representa el árbol binario:
c
es una tupla que representa los nodos izquierdo y derecho y la tupla vacía()
se usa para indicar la ausencia de un nodo.fuente
Kotlin , 42 bytes
Pruébalo en línea!
Dónde
fuente