Para cada nodo en un árbol binario equilibrado, la diferencia máxima en las alturas del subárbol secundario izquierdo y el subárbol secundario derecho es como máximo 1.
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
Los siguientes son árboles binarios y un informe sobre si están equilibrados o no:
El árbol de arriba está desequilibrado .
El árbol de arriba es equilibrado. .
Escriba el programa más corto posible que acepte como entrada la raíz de un árbol binario y devuelva un valor falsey si el árbol está desequilibrado y un valor verdadero si el árbol está equilibrado.
Entrada
La raíz de un árbol binario. Esto puede ser en forma de una referencia al objeto raíz o incluso una lista que es una representación válida de un árbol binario.
Salida
Devuelve el valor verdadero: si el árbol está equilibrado
Devuelve el valor de falsey: si el árbol es un equilibrado.
Definición de un árbol binario
Un árbol es un objeto que contiene un valor y otros dos árboles o punteros a ellos.
La estructura del árbol binario se parece a la siguiente:
typedef struct T
{
struct T *l;
struct T *r;
int v;
}T;
Si usa una representación de lista para un árbol binario, puede tener un aspecto similar al siguiente:
[root_value, left_node, right_node]
4
, ¿está equilibrado el árbol restante?Respuestas:
Jalea , 11 bytes
Pruébalo en línea!
El árbol vacío está representado por
[]
.fuente
Prólogo (SWI) , 49 bytes
Pruébalo en línea!
Representa los árboles como
Value/Left_Child/Right_Child
, siendo el árbol vacío el átomoe
. Define+/2
, que sale por éxito o fracaso, con una variable independiente (o una ya igual a la altura del árbol) a la izquierda y el árbol a la derecha; si el argumento de altura es inaceptable, agregue 9 bytes para definir-T:-_+T.
.fuente
_/
podría extraerse por -2 bytes.)Wolfram Language (Mathematica) , 50 bytes
Usar
Null
para nulo,value[left, right]
para nodos. Por ejemplo, el siguiente árbol se escribe como2[7[2[Null, Null], 6[5[Null, Null], 11[Null, Null]]], 5[Null, 9[4[Null, Null], Null]]]
.Pruébalo en línea!
fuente
Python 3.8 (prelanzamiento) ,
133125bytesPruébalo en línea!
Toma un árbol en el formato de "lista": un nodo está
[value, left, right]
conleft
yright
siendo nodos.Invocar la función
h
.Devoluciones
0
oFalse
para un árbol desequilibrado. Devoluciones1
oTrue
para un árbol equilibrado.Sin golf:
-10: lógica invertida para deshacerse de
not
sSi se permite tomar argumentos en medio de una llamada, esto podría acortarse a (115 bytes)
con
_
ser el árbol para verificar.fuente
JavaScript (Node.js) , 49 bytes
Pruébalo en línea!
-9 bytes por Arnauld.
JavaScript, 58 bytes
Pruébalo en línea!
Usar
[]
para nulo y[left, right, value]
para nodos.fuente
JavaScript, 162 bytes
Pruébalo en línea!
El formato de la entrada es un objeto.
Explicación
Al realizar la primera búsqueda de amplitud, encuentre la profundidad del primer nodo al que le faltan una o más ramas.
Continuando con la primera búsqueda de ancho, devuelve cero si algún elemento es dos más profundo que la profundidad de las ramas que faltan en el primer nodo.
Si no se encuentra dicho nodo, devuelva 1
fuente
4
.Julia, 56 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.El valor de Falsey es que
NaN
cualquier número entero es verdadero.fuente
≢
, según el contador de bytes incorporado de TIO . De todos modos, ¡bienvenido a CG&CC!Kotlin , 67 bytes
Dónde
Pruébalo en línea!
fuente
C, 117 bytes
La implementación de la estructura es la siguiente:
Prueba esto en JDoodle
fuente
<2
para esa última verificación en su lugarPython 2 ,
999694 bytesPruébalo en línea!
3 bytes de Jo King .
Toma la entrada como: el nodo vacío es
[]
, y otros nodos son[<value>, <leftNode>, <rightNode>]
. Salidas0/1
para falso / verdadero.fuente