Inspiré d'une question récente sur SO ...
Écrivez une fonction pour imprimer un arbre binaire au format suivant:
3
/ \
1 5
\ / \
2 4 6
- La sortie doit être composée d'une ligne de nœuds, suivie d'une ligne de
/
et de\
caractères indiquant les relations, suivie d'une ligne de nœuds, etc. - Vous pouvez supposer que tous les nœuds sont représentables comme un seul caractère.
- Les nœuds adjacents au niveau le plus bas doivent être séparés par au moins un espace, les nœuds plus haut doivent être séparés le cas échéant.
- Les nœuds avec deux enfants doivent être placés précisément au milieu de leurs enfants directs.
- Les barres obliques de relation doivent être à mi-chemin entre le parent et l'enfant approprié (arrondissez comme vous le souhaitez).
Contribution:
L'entrée sera fournie comme argument à votre fonction. Je ne spécifierai pas la structure exacte de l'arbre, mais il doit être utilisable comme un arbre binaire réel. Aucun "arbre n'est représenté dans mon programme comme des chaînes ressemblant par coïncidence à la sortie attendue".
Vous pouvez imprimer sur un flux de sortie ou renvoyer une chaîne contenant la sortie, votre choix.
Points pour le code le plus court, mais je préférerais de loin une solution longue fonctionnant pleinement qu'une courte fonctionnant à 90%.
Mise à jour pour la prime:
Pour la prime, je (Optimizer) fais de légers changements:
- L'entrée peut provenir de STDIN, ARGV ou d'un argument de fonction.
- La sortie doit être sur STDOUT (ou
console.log
pour JS) - Vous pouvez supposer que l'entrée est sous forme de tableau, par exemple.
[1,2,3]
ou[1 2 3]
Mise à jour 2 - L'arbre binaire doit en fait être un arbre de recherche binaire. Comme je ne l'ai pas mentionné initialement, je vais permettre aux utilisateurs de traiter la conversion d'un tableau normal en un tableau d'arbre de recherche binaire comme un programme distinct et le nombre d'octets final ne sera que pour que le programme prenne le tableau en argument et l'imprime comme un arbre binaire.
30000,1000,499999