Pour chaque nœud dans un arbre binaire équilibré, la différence maximale dans les hauteurs du sous-arbre enfant gauche et du sous-arbre enfant droit est au plus 1.
La hauteur d'un arbre binaire est la distance entre le nœud racine et le nœud enfant le plus éloigné de la racine.
Voici un exemple:
2 <-- root: Height 1
/ \
7 5 <-- Height 2
/ \ \
2 6 9 <-- Height 3
/ \ /
5 11 4 <-- Height 4
Hauteur de l'arbre binaire: 4
Voici des arbres binaires et un rapport indiquant s'ils sont équilibrés ou non:
L'arbre ci-dessus est déséquilibré .
L'arbre ci-dessus est équilibré .
Écrivez le programme le plus court possible qui accepte en entrée la racine d'un arbre binaire et renvoie une valeur de falsey si l'arbre est déséquilibré et une valeur véridique si l'arbre est équilibré.
Contribution
La racine d'un arbre binaire. Cela peut être sous la forme d'une référence à l'objet racine ou même d'une liste qui est une représentation valide d'un arbre binaire.
Production
Renvoie une valeur véridique: si l'arbre est équilibré
Retourne la valeur de falsey: si l'arbre n'est pas équilibré.
Définition d'un arbre binaire
Un arbre est un objet qui contient une valeur et deux autres arbres ou pointeurs vers eux.
La structure de l'arbre binaire ressemble à ceci:
typedef struct T
{
struct T *l;
struct T *r;
int v;
}T;
Si vous utilisez une représentation de liste pour un arbre binaire, elle peut ressembler à ceci:
[root_value, left_node, right_node]
4
, l'arbre restant est-il équilibré?Réponses:
Gelée , 11 octets
Essayez-le en ligne!
L'arbre vide est représenté par
[]
.la source
Prolog (SWI) , 49 octets
Essayez-le en ligne!
Représente les arbres en tant que
Value/Left_Child/Right_Child
, l'arbre vide étant l'atomee
. Définit+/2
, qui génère un succès ou un échec, avec une variable indépendante (ou déjà égale à la hauteur de l'arborescence) à gauche et l'arborescence à droite - si l'argument hauteur est inacceptable, ajoutez 9 octets à définir-T:-_+T.
.la source
_/
pourrait être supprimée pour -2 octets.)Wolfram Language (Mathematica) , 50 octets
Utilisez
Null
pour null,value[left, right]
pour les nœuds. Par exemple, l'arborescence suivante s'écrit2[7[2[Null, Null], 6[5[Null, Null], 11[Null, Null]]], 5[Null, 9[4[Null, Null], Null]]]
.Essayez-le en ligne!
la source
Python 3.8 (pré-version) ,
133125 octetsEssayez-le en ligne!
Prend un arbre au format "liste": Un nœud est
[value, left, right]
avecleft
etright
étant des nœuds.Appelez la fonction
h
.Renvoie
0
ouFalse
pour un arbre déséquilibré. Renvoie1
ouTrue
pour un arbre équilibré.Non golfé:
-10: Logique inversée pour se débarrasser de
not
sSi la prise d'arguments au milieu d'un appel est autorisée, cela pourrait être raccourci à (115 octets)
d'
_
être l'arbre à vérifier.la source
JavaScript (Node.js) , 49 octets
Essayez-le en ligne!
-9 octets par Arnauld.
JavaScript, 58 octets
Essayez-le en ligne!
Utilisez
[]
pour null et[left, right, value]
pour les nœuds.la source
JavaScript, 162 octets
Essayez-le en ligne!
Le format de l'entrée est un objet
Explication
En effectuant une première recherche en largeur, trouvez la profondeur du premier nœud auquel il manque une ou plusieurs branches.
En poursuivant la première recherche de largeur, retournez zéro si un élément est plus profond de deux que la profondeur des branches manquantes du premier nœud.
Si aucun tel nœud n'est trouvé, retournez 1
la source
4
.Julia, 56 octets
Avec la structure suivante représentant l'arbre binaire:
c
est un tuple représentant les nœuds gauche et droit et le tuple vide()
est utilisé pour signaler l'absence d'un nœud.La valeur de Falsey est
NaN
, tout entier est vrai.la source
≢
, selon le compteur d'octets intégré de TIO . Quoi qu'il en soit, bienvenue chez CG&CC!Kotlin , 67 octets
Où
Essayez-le en ligne!
la source
C, 117 octets
La mise en œuvre de Struct est la suivante:
Essayez ceci sur JDoodle
la source
<2
pour ce dernier contrôle à la placePython 2 ,
999694 octetsEssayez-le en ligne!
3 octets de Jo King .
Prend l'entrée comme: le nœud vide est
[]
, et les autres nœuds le sont[<value>, <leftNode>, <rightNode>]
. Sorties0/1
pour False / True.la source