Ispirato da una recente domanda su SO ...
Scrivi una funzione per stampare un albero binario nel seguente formato:
3
/ \
1 5
\ / \
2 4 6
- L'output dovrebbe essere costituito da una linea di nodi, seguita da una linea di
/
e\
caratteri che indicano le relazioni, seguita da una linea di nodi, ecc. - Puoi presumere che tutti i nodi siano rappresentabili come un singolo carattere.
- I nodi adiacenti al livello più basso dovrebbero essere separati da almeno uno spazio, i nodi più in alto dovrebbero essere separati come appropriato.
- I nodi con due bambini dovrebbero essere posizionati esattamente nel mezzo dei loro figli diretti.
- Le barre delle relazioni dovrebbero essere a metà strada tra il genitore e il figlio appropriato (arrotondare in qualunque modo desiderato).
Ingresso:
L'input verrà fornito come argomento per la tua funzione. Non specificherò l'esatta struttura dell'albero, tuttavia deve essere utilizzabile come un vero albero binario. No "gli alberi sono rappresentati nel mio programma come stringhe che coincidono casualmente come l'output previsto".
È possibile stampare su un flusso di output o restituire una stringa contenente l'output, a scelta.
Punti per il codice più breve, ma preferirei di gran lunga una soluzione lunga perfettamente funzionante rispetto a una breve del 90% funzionante.
Aggiornamento per la taglia:
Per la taglia, io (ottimizzatore) sto apportando lievi modifiche:
- L'input può provenire da STDIN, ARGV o argomento della funzione.
- L'output deve essere su STDOUT (o
console.log
per JS) - Puoi supporre che l'input sia in una forma di array, ad esempio.
[1,2,3]
o[1 2 3]
Aggiornamento 2 : l'albero binario dovrebbe effettivamente essere un albero di ricerca binario. Dato che non ne ho parlato inizialmente, consentirò agli utenti di trattare la conversione di un array normale in un array di alberi di ricerca binario come un programma separato e il conteggio dei byte finale sarà solo per il programma di prendere l'array come argomento e stamparlo come un albero binario.
30000,1000,499999