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.
quelle
30000,1000,499999
Antworten:
Fortran 77 - 1085 Zeichen
Der Baum wird im Eingabearray wie
t
gewohnt dargestellt: Wurzel bei 1, Wurzel-> links bei 2, Wurzel-> rechts bei 3 Wurzel-> links-> links bei 4 ...Der Ausgang sollte in ein herkömmliches Terminal mit einer Tiefe von bis zu 5 Ebenen passen.
Ich verwende genau einen Schrägstrich zwischen jedem Knotenpaar, der in der Nähe der Spitze ziemlich albern aussieht, wenn es vier oder mehr Ebenen gibt. Ich erlaubte bis zu dreistellige Knoten.
Vollständiges Programm mit Kommentaren und einem Startgerüst:
Ausgabe mit Eingabe entsprechend dem Beispiel:
quelle
CJam,
10099 BytesDie Eingabe muss eine Liste von Zeichen ohne ASCII-Steuerzeichen sein. Leere Knoten sind mit einem Leerzeichen gekennzeichnet. Es muss auch ein perfekter Binärbaum mit genau 2 n -1 Knoten sein.
Beispiel:
Oder verwenden Sie einfach Zeichenfolgen:
Ausgabe:
Erläuterung
Konvertierungsskript
Es akzeptiert entweder Zeichen oder einstellige Zahlen.
Beispiele (alle sind gleich):
Ausgabe:
Es ist eine einfache kartesische Baumkonstruktion.
quelle
Python 2, 411 Bytes
Hinweis: Die erste Einrückungsstufe ist 1 Leerzeichen, die zweite ist eine Registerkarte.
Rufen Sie
f
mit einer Liste von Ein-Zeichen-Zeichenfolgen oderNone
's, z.f(['1',None,'3'])
. Die Liste darf nicht leer sein.Dies sollte den Regeln für das Kopfgeld entsprechen.
Konverter-Skript:
Konvertiert und ordnet in das vom Binärbaumdrucker verwendete Format. Beispiel:
-
Beispiele:
Um diese auszuführen, sollten Sie die Hauptdatei
bt.py
und die Konverterdatei habenconv.py
.quelle
['1','2','3','4','5','6','7','8','9']
array ist nicht das, was Sie gezeigt haben. Es sollte3
ein rechtes Kind haben, von2
dem ein rechtes Kind1
ein Wurzelelement ist.APL, 125 Zeichen
Beispiel:
Hier getestet.
quelle
Ruby, 265 Bytes
Die @ proudhaskeller-Version, 269 Bytes
Erklärung
Die ausführliche Version:
Beispiel
gibt:
(Ich habe das Konvertierungsskript noch nicht geschrieben.)
quelle