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
Définition d'un arbre binaire
Un arbre est un objet qui contient une valeur entière signée et deux autres arbres ou pointeurs vers eux.
La structure de la structure d'arbre binaire ressemble à ceci:
typedef struct tree
{
struct tree * l;
struct tree * r;
int v;
} tree;
Le défi:
Contribution
La racine d'un arbre binaire
Production
Le nombre qui représente la hauteur d'un arbre binaire
En supposant que la racine d'un arbre binaire vous soit donnée en entrée, écrivez le programme le plus court qui calcule la hauteur d'un arbre binaire et renvoie la hauteur. Le programme avec le moins d'octets (espaces blancs de comptabilité) gagne.
code-golf
binary-tree
T. Salim
la source
la source
h
. Il serait peut-être préférable de définir une structure spécifique constituée uniquement de listes aux fins de ce défi.[root_value, left_node, right_node]
où chacunleft_node
etright_node
sont aussi des arbres binaires acceptables? Ce sera trivial dans de nombreuses langues, mais pourrait être amusant dans d'autres.a tree is an object that contains a value and either two other trees or pointers to them
. Une définition qui inclut les langages sans objets serait également bien aussi.Réponses:
Gelée , 3 octets
Un lien monadique acceptant une liste représentant l'arbre:,
[root_value, left_tree, right_tree]
où chacuneleft_tree
etright_tree
sont des structures similaires (vides si besoin est), ce qui donne la hauteur.Essayez-le en ligne!
Comment?
Assez trivial dans Jelly:
la source
x
lieu de[x, [], []]
...Python 2 ,
3533 octetsMerci à Arnauld d'avoir remarqué un oubli et d'économiser 4.
Une fonction récursive acceptant une liste représentant l'arbre:,
[root_value, left_tree, right_tree]
où chacuneleft_tree
etright_tree
sont des structures similaires (vides si besoin est), qui renvoie la hauteur.Essayez-le en ligne!
Notez que
[]
cela reviendraFalse
, mais en PythonFalse==0
.la source
Haskell, 33 octets
Utilisation du type d'arbre personnalisé
data T = L | N T T Int
, qui est l'équivalent Haskell de la structure C donnée dans le défi.Essayez-le en ligne!
la source
Perl 6 , 25 octets
L'entrée est une liste à 3 éléments
(l, r, v)
. L'arbre vide est la liste vide.Essayez-le en ligne!
Explication
Ancienne solution, 30 octets
Essayez-le en ligne!
la source
&?BLOCK
astuce est intéressante mais c'est deux octets de moins pour affecter le bloc à $!$!
ou$/
j'ai l'impression de tricher.05AB1E ,
1175 octets-4 octets grâce à @ExpiredData .
-2 octets grâce à @Grimy .
Le format d'entrée est similaire à la réponse Jelly: une liste représentant l'arbre:,
[root_value, left_tree, right_tree]
où chacuneleft_tree
etright_tree
sont des structures similaires (éventuellement vide). Ie[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
représente l'arbre de la description du défi.Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires .
Explication:
Notez que bien que 05AB1E soit basé sur 0, la boucle de modifications
Δ
entraîne la correction de l'index de sortie, car il a besoin d'une itération supplémentaire pour vérifier qu'il ne change plus.la source
JavaScript (ES6),
3533 octetsStructure d'entrée:
[[left_node], [right_node], value]
Essayez-le en ligne!
Commenté
la source
a&&-~
.C, 43 octets
La structure de l'arbre binaire est la suivante:
la source
JavaScript (Node.js) , 32 octets
Essayez-le en ligne!
Utiliser le nomflat
au lieu deflatten
ousmoosh
est une excellente idée pour le golf de code.Utilisation
[]
de noeud nul dans l'arborescence et[left, right, value]
de noeuds.value
voici un entier.la source
Wolfram Language (Mathematica) , 10 octets
Essayez-le en ligne! Prend l'entrée comme une liste imbriquée
{v, l, r}
.la source
2[7[2,6[5,11]],5[9[4,],]]
est une représentation valide de l'arbre,Depth
fonctionneHaskell, 28 octets
En utilisant la définition de données suivante:
La hauteur est:
la source
Schéma, 72 octets
Version plus lisible:
Utilisation de listes du formulaire (données, gauche, droite) pour représenter un arbre. Par exemple
Essayez-le en ligne!
la source
R , 51 octets
Essayez-le en ligne!
Entrée: une liste imbriquée au format:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
Algorithme: aplatit de façon itérative l'arbre d'un niveau jusqu'à ce qu'il devienne un vecteur plat: le nombre d'itérations correspond à la profondeur maximale.
Inspiré par solution @KevinCruijssen
Alternative récursive:
R , 64 octets
Essayez-le en ligne!
Redéfinit la fonction / l'opérateur
'~'
ce qui lui permet de calculer la profondeur maximale d'un arbre stocké dans une structure de liste.La structure de liste d'un arbre est au format:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
la source
d=1
et puisd-1
à la fin? Tu ne pourrais pas commencer0
?>
à~
ici pour que les cas de test sont plus faciles à l' entréeJapt , 8 octets
Essayez-le
Original, 9 octets
Essayez-le
la source
K (ngn / k) , 4 octets
Solution:
Essayez-le en ligne!
Explication:
Je pense que j'ai peut-être manqué le point.
Représentant un arbre en tant que liste à 3 éléments (nœud parent; enfant gauche; enfant droit), l'exemple peut être représenté comme
ou:
(2;(7;(,2);(6;(,5);(,11)));(5;();(9;(,4);())))
.La solution consiste donc à aplatir itérativement et à compter les itérations:
la source
Fusain , 29 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Modifie temporairement l'arborescence pendant le traitement. Explication:
Poussez zéro vers le nœud racine.
Poussez le nœud racine dans la liste de tous les nœuds.
Effectuez une recherche en premier dans l'arborescence.
Obtenez la profondeur de ce nœud.
Faites une boucle sur tous les nœuds enfants.
Indiquez au nœud enfant la profondeur de son parent et placez-le dans la liste de tous les nœuds.
Une fois tous les nœuds traversés, imprimez la profondeur du dernier nœud. Étant donné que la traversée était la largeur en premier, ce sera la hauteur de l'arbre.
la source
Stax , 5 octets
Exécuter et déboguer
Stax n'a ni pointeurs ni valeurs nulles, donc je représente l'entrée comme
[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
. C'est peut-être un avantage injuste, mais c'était le plus près possible.Décompressé, non golfé et commenté, le code ressemble à ceci.
Exécutez celui-ci
la source
Kotlin, 45 octets
En supposant que la classe suivante est définie
Essayez-le en ligne
la source
Julia, 27 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 source
Kotlin , 42 octets
Essayez-le en ligne!
Où
la source