Inspiriert von einer aktuellen Frage zu SO ...
Schreiben Sie eine Funktion, um einen Binärbaum im folgenden Format zu drucken:
3
/ \
1 5
\ / \
2 4 6
- Die Ausgabe sollte aus einer Reihe von Knoten bestehen, gefolgt von einer Reihe von
/
und\
Zeichen, die Beziehungen angeben, gefolgt von einer Reihe von Knoten usw. - Sie können davon ausgehen, dass alle Knoten als ein einzelnes Zeichen darstellbar sind.
- Benachbarte Knoten auf der untersten Ebene sollten durch mindestens ein Leerzeichen voneinander getrennt sein, weiter oben liegende Knoten sollten entsprechend voneinander getrennt sein.
- Knoten mit zwei Kindern sollten genau in der Mitte ihrer direkten Kinder platziert werden.
- Die Schrägstriche in der Beziehung sollten in der Mitte zwischen dem Elternteil und dem entsprechenden Kind stehen (in beliebiger Reihenfolge).
Eingang:
Die Eingabe wird als Argument für Ihre Funktion bereitgestellt. Ich werde die genaue Struktur des Baums nicht spezifizieren, er muss jedoch als tatsächlicher Binärbaum verwendbar sein. Keine "Bäume werden in meinem Programm als Strings dargestellt, die zufällig der erwarteten Ausgabe entsprechen".
Sie können in einen Ausgabestream drucken oder eine Zeichenfolge zurückgeben, die die Ausgabe Ihrer Wahl enthält.
Punkte für kürzesten Code, aber ich würde eine vollständig funktionierende lange Lösung einer zu 90% funktionierenden kurzen Lösung vorziehen.
Update für das Kopfgeld:
Für das Kopfgeld nehme ich (Optimierer) leichte Änderungen vor:
- Die Eingabe kann über STDIN, ARGV oder ein Funktionsargument erfolgen.
- Die Ausgabe muss auf STDOUT (oder
console.log
für JS) erfolgen - Sie können beispielsweise davon ausgehen, dass die Eingabe in Form eines Arrays erfolgt.
[1,2,3]
oder[1 2 3]
Update 2 - Der Binärbaum sollte eigentlich ein binärer Suchbaum sein. Da ich dies anfangs nicht erwähnt habe, werde ich den Benutzern erlauben, das Konvertieren eines normalen Arrays in ein binäres Suchbaum-Array als separates Programm zu behandeln, und die endgültige Byteanzahl wird nur dafür sein, dass das Programm das Array als Argument aufnimmt und es ausgibt wie ein binärer Baum.
30000,1000,499999