Die Höhe eines Binärbaums ist der Abstand vom Wurzelknoten zum untergeordneten Knoten, der am weitesten von der Wurzel entfernt ist.
Unten ist ein Beispiel:
2 <-- root: Height 1
/ \
7 5 <-- Height 2
/ \ \
2 6 9 <-- Height 3
/ \ /
5 11 4 <-- Height 4
Höhe des Binärbaums: 4
Definition eines binären Baumes
Ein Baum ist ein Objekt, das einen vorzeichenbehafteten ganzzahligen Wert und entweder zwei andere Bäume oder Zeiger darauf enthält.
Die Struktur der binären Baumstruktur sieht ungefähr so aus:
typedef struct tree
{
struct tree * l;
struct tree * r;
int v;
} tree;
Die Herausforderung:
Eingang
Die Wurzel eines binären Baumes
Ausgabe
Die Zahl, die die Höhe eines Binärbaums darstellt
Angenommen, Sie erhalten die Wurzel eines Binärbaums als Eingabe, schreiben Sie das kürzeste Programm, das die Höhe eines Binärbaums berechnet und die Höhe zurückgibt. Das Programm mit der geringsten Anzahl von Bytes (Accounting Whitespaces) gewinnt.
quelle
h
. Könnte besser sein, eine bestimmte Struktur zu definieren, die nur aus Listen besteht, um diese Herausforderung zu bewältigen.[root_value, left_node, right_node]
in der alleleft_node
undright_node
auch Binärbäume zulässig sind? Es wird in vielen Sprachen trivial sein, aber in einigen anderen könnte es Spaß machen.a tree is an object that contains a value and either two other trees or pointers to them
. Eine Definition, die Sprachen ohne Objekte einschließt, wäre auch schön.Antworten:
Gelee , 3 Bytes
Ein monadischer Link, der eine Liste akzeptiert, die den Baum darstellt:
[root_value, left_tree, right_tree]
wobei jede vonleft_tree
undright_tree
ähnliche Strukturen sind (leer, wenn nötig), die die Höhe ergeben.Probieren Sie es online!
Wie?
Ziemlich trivial in Jelly:
quelle
x
anstatt[x, [], []]
...Python 2 ,
3533 BytesVielen Dank an Arnauld, der ein Versehen bemerkt und 4 gespart hat.
Eine rekursive Funktion, die eine Liste akzeptiert, die den Baum darstellt:
[root_value, left_tree, right_tree]
wobei jede vonleft_tree
undright_tree
ähnliche Strukturen sind (ggf. leer), die die Höhe zurückgibt.Probieren Sie es online!
Beachten Sie, dass zurückgegeben
[]
wirdFalse
, jedoch in PythonFalse==0
.quelle
Haskell, 33 Bytes
Verwenden des benutzerdefinierten Baumtyps
data T = L | N T T Int
, der dem Haskell-Äquivalent der in der Challenge angegebenen C-Struktur entspricht.Probieren Sie es online!
quelle
Perl 6 , 25 Bytes
Die Eingabe ist eine Liste mit 3 Elementen
(l, r, v)
. Der leere Baum ist die leere Liste.Probieren Sie es online!
Erläuterung
Alte Lösung, 30 Bytes
Probieren Sie es online!
quelle
&?BLOCK
Trick ist interessant, aber es ist ein paar Bytes kürzer , um den Block $ zuzuweisen!$!
oder$/
fühlt sich an wie mir betrügt.05AB1E ,
1175 Bytes-4 Bytes dank @ExpiredData .
-2 Bytes dank @Grimy .
Das Eingabeformat ist ähnlich wie bei der Gelee-Antwort: Eine Liste, die den Baum darstellt:
[root_value, left_tree, right_tree]
wobei jede vonleft_tree
undright_tree
ähnliche Strukturen sind (optional leer). Dh[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
repräsentiert den Baum aus der Herausforderungsbeschreibung.Probieren Sie es online aus oder überprüfen Sie ein paar weitere Testfälle .
Erläuterung:
Beachten Sie, dass 05AB1E zwar 0-basiert ist, die Änderungsschleife jedoch
Δ
bewirkt, dass der Ausgabeindex korrekt ist, da eine zusätzliche Iteration erforderlich ist, um zu überprüfen, dass er sich nicht mehr ändert.quelle
JavaScript (ES6),
3533 BytesEingabestruktur:
[[left_node], [right_node], value]
Probieren Sie es online!
Kommentiert
quelle
a&&-~
.C 43 Bytes
Die Struktur des Binärbaums ist wie folgt:
quelle
JavaScript (Node.js) , 32 Byte
Probieren Sie es online!
Die Verwendung des Namensflat
anstelle vonflatten
odersmoosh
ist eine großartige Idee für Code-Golf.Verwenden von
[]
für Nullknoten in der Struktur und[left, right, value]
für Knoten.value
Hier ist eine ganze Zahl.quelle
Wolfram Language (Mathematica) , 10 Bytes
Probieren Sie es online! Nimmt die Eingabe als verschachtelte Liste
{v, l, r}
.quelle
2[7[2,6[5,11]],5[9[4,],]]
es sich um eine gültige Darstellung des Baums handelt,Depth
funktioniertHaskell, 28 Bytes
Verwendung der folgenden Datendefinition:
Die Höhe beträgt:
quelle
Schema, 72 Bytes
Mehr lesbare Version:
Verwenden von Listen des Formulars (Daten, links, rechts) zur Darstellung eines Baums. Z.B
Probieren Sie es online!
quelle
R , 51 Bytes
Probieren Sie es online!
Eingabe: Eine verschachtelte Liste im Format:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
Algorithmus: Glättet den Baum iterativ um eine Ebene, bis er zu einem flachen Vektor wird: Die Anzahl der Iterationen entspricht der maximalen Tiefe.
Inspiriert von der @ KevinCruijssen-Lösung
Rekursive Alternative:
R , 64 Bytes
Probieren Sie es online!
Definiert die Funktion / den Operator neu,
'~'
sodass die maximale Tiefe eines in einer Listenstruktur gespeicherten Baums berechnet werden kann.Die Listenstruktur eines Baums hat das Format:
list(ROOT_ELEMENT, LEFT_TREE, RIGHT_TREE)
quelle
d=1
und dannd-1
am ende Könntest du nicht bei anfangen0
?>
, damit die Testfälle einfacher einzugeben sind~
Japt , 8 Bytes
Versuch es
Original, 9 Bytes
Versuch es
quelle
K (ngn / k) , 4 Bytes
Lösung:
Probieren Sie es online!
Erläuterung:
Ich glaube, ich habe den Punkt verpasst.
Durch die Darstellung eines Baums als Liste mit drei Elementen (übergeordneter Knoten; linkes Kind; rechtes Kind) kann das Beispiel als dargestellt werden
oder:
(2;(7;(,2);(6;(,5);(,11)));(5;();(9;(,4);())))
.Die Lösung ist also, iterativ zu reduzieren und die Iterationen zu zählen:
quelle
Kohle , 29 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Ändert den Baum vorübergehend während der Verarbeitung. Erläuterung:
Schieben Sie die Null auf den Wurzelknoten.
Verschieben Sie den Stammknoten in die Liste aller Knoten.
Führen Sie eine Breitensuche des Baums durch.
Ruft die Tiefe dieses Knotens ab.
Schleife über alle untergeordneten Knoten.
Teilen Sie dem untergeordneten Knoten die Tiefe des übergeordneten Knotens mit und verschieben Sie ihn in die Liste aller Knoten.
Nachdem alle Knoten durchlaufen wurden, wird die Tiefe des letzten Knotens gedruckt. Da die Durchquerung die Breite zuerst war, wird dies die Höhe des Baumes sein.
quelle
Stax , 5 Bytes
Führen Sie es aus und debuggen Sie es
Stax hat weder Zeiger noch Nullwerte, daher vertrete ich die Eingabe gerne
[2,[7,[2,[],[]],[6,[5,[],[]],[11,[],[]]]],[5,[],[9,[4,[],[]],[]]]]
. Vielleicht ist das ein unfairer Vorteil, aber es war der größte, den ich bekommen konnte.Entpackt, ungolfed und kommentiert sieht der Code so aus.
Führen Sie dieses aus
quelle
Kotlin, 45 Bytes
Angenommen, die folgende Klasse ist definiert
Probieren Sie es online aus
quelle
Julia, 27 Bytes
Mit der folgenden Struktur, die den Binärbaum darstellt:
c
ist ein Tupel, das den linken und den rechten Knoten darstellt, und das leere Tupel()
wird verwendet, um die Abwesenheit eines Knotens anzuzeigen.quelle
Kotlin , 42 Bytes
Probieren Sie es online!
Woher
quelle