Inspirado por una pregunta reciente sobre SO ...
Escriba una función para imprimir un árbol binario en el siguiente formato:
3
/ \
1 5
\ / \
2 4 6
- La salida debe consistir en una línea de nodos, seguido de una línea de
/
y\
caracteres que indican relaciones, seguida de una línea de nodos, etc. - Puede suponer que todos los nodos son representables como un solo carácter.
- Los nodos adyacentes en el nivel más bajo deben estar separados por al menos un espacio, los nodos más arriba deben estar separados según corresponda.
- Los nodos con dos hijos deben colocarse precisamente en el medio de sus hijos directos.
- Las barras de relación deben estar a medio camino entre el padre y el niño apropiado (redondee de la forma que desee).
Entrada:
La entrada se proporcionará como argumento para su función. No especificaré la estructura exacta del árbol, sin embargo, debe ser utilizable como un árbol binario real. No hay "árboles representados en mi programa como cadenas que coinciden con el resultado esperado".
Puede imprimir en una secuencia de salida o devolver una cadena que contenga la salida, su elección.
Apunta por el código más corto, pero preferiría una solución larga que funcione completamente que una solución corta que funcione al 90%.
Actualización para la recompensa:
Para la recompensa, yo (Optimizer) estoy haciendo pequeños cambios:
- La entrada puede ser de STDIN, ARGV o argumento de función.
- La salida debe estar en STDOUT (o
console.log
para JS) - Puede suponer que la entrada está en forma de matriz, por ejemplo.
[1,2,3]
o[1 2 3]
Actualización 2 : el árbol binario debería ser un árbol de búsqueda binario. Como no mencioné esto inicialmente, permitiré a los usuarios tratar la conversión de una matriz normal en una matriz de árbol de búsqueda binaria como un programa separado y el recuento final de bytes solo será para que el programa tome la matriz como argumento e imprima como un árbol binario
30000,1000,499999