Für jeden Knoten in einem ausgeglichenen Binärbaum beträgt der maximale Höhenunterschied zwischen dem linken untergeordneten Teilbaum und dem rechten untergeordneten Teilbaum höchstens 1.
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
Die folgenden sind Binärbäume und ein Bericht darüber, ob sie ausgeglichen sind oder nicht:
Der Baum darüber ist unausgeglichen .
Der obige Baum ist ausgeglichen .
Schreiben Sie das kürzestmögliche Programm, das die Wurzel eines Binärbaums als Eingabe akzeptiert und einen falschen Wert zurückgibt, wenn der Baum unausgeglichen ist, und einen wahren Wert, wenn der Baum ausgeglichen ist.
Eingang
Die Wurzel eines binären Baumes. Dies kann in Form eines Verweises auf das Stammobjekt oder sogar einer Liste erfolgen, die eine gültige Darstellung eines Binärbaums darstellt.
Ausgabe
Gibt den Wahrheitswert zurück: Wenn der Baum ausgeglichen ist
Gibt einen falschen Wert zurück: Wenn der Baum nicht ausgeglichen ist.
Definition eines binären Baumes
Ein Baum ist ein Objekt, das einen Wert und entweder zwei andere Bäume oder Zeiger darauf enthält.
Die Struktur des Binärbaums sieht ungefähr so aus:
typedef struct T
{
struct T *l;
struct T *r;
int v;
}T;
Wenn Sie eine Listendarstellung für einen Binärbaum verwenden, sieht diese möglicherweise folgendermaßen aus:
[root_value, left_node, right_node]
4
, ist der verbleibende Baum ausgeglichen?Antworten:
Jelly , 11 Bytes
Probieren Sie es online!
Der leere Baum wird durch dargestellt
[]
.quelle
Prolog (SWI) , 49 Bytes
Probieren Sie es online!
Stellt Bäume als dar
Value/Left_Child/Right_Child
, wobei der leere Baum das Atom iste
. Definiert+/2
, welche Ergebnisse durch Erfolg oder Misserfolg ausgegeben werden , wobei sich links eine ungebundene Variable (oder eine Variable, die bereits der Höhe des Baums entspricht) und rechts der Baum befinden. Wenn das Argument height nicht akzeptabel ist, fügen Sie 9 Bytes zur Definition hinzu-T:-_+T.
.quelle
_/
könnte , könnte er für -2 Byte herausgenommen werden.)Wolfram Language (Mathematica) , 50 Byte
Verwenden Sie
Null
für nullvalue[left, right]
für Knoten. Beispielsweise wird der folgende Baum als geschrieben2[7[2[Null, Null], 6[5[Null, Null], 11[Null, Null]]], 5[Null, 9[4[Null, Null], Null]]]
.Probieren Sie es online!
quelle
Python 3.8 (Vorabversion) ,
133 bis125 ByteProbieren Sie es online!
Nimmt einen Baum im "Listen" -Format: Ein Knoten ist
[value, left, right]
mitleft
undright
als Knoten.Rufen Sie die Funktion auf
h
.Gibt
0
oderFalse
für einen unausgeglichenen Baum zurück. Gibt1
oderTrue
für einen ausgeglichenen Baum zurück.Ungolfed:
-10: Umgekehrte Logik, um
not
s loszuwerdenWenn die Übernahme von Argumenten in der Mitte eines Aufrufs zulässig ist, kann dies auf (115 Byte) verkürzt werden.
mit
_
dem Baum zu überprüfen.quelle
JavaScript (Node.js) , 49 Byte
Probieren Sie es online!
-9 Bytes von Arnauld.
JavaScript, 58 Byte
Probieren Sie es online!
Verwenden Sie
[]
für Null und[left, right, value]
für Knoten.quelle
JavaScript, 162 Bytes
Probieren Sie es online!
Das Format der Eingabe ist ein Objekt
Erläuterung
Wenn Sie eine Breitensuche durchführen, ermitteln Sie die Tiefe des ersten Knotens, dem ein oder mehrere Zweige fehlen.
Setzen Sie die breiteste erste Suche fort und geben Sie Null zurück, wenn ein Element zwei tiefer ist als die Tiefe des ersten Knotens, in dem Verzweigungen fehlen.
Wenn kein solcher Knoten gefunden wird, geben Sie 1 zurück
quelle
4
.Julia, 56 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.Falscher Wert ist
NaN
, jede ganze Zahl ist wahr.quelle
≢
von TIO tatsächlich 57 Byte . Wie auch immer, herzlich willkommen bei CG & CC!Kotlin , 67 Bytes
Wo
Probieren Sie es online!
quelle
C 117 Bytes
Strukturelle Implementierung ist die folgende:
Versuchen Sie dies auf JDoodle
quelle
<2
stattdessen für die letzte Überprüfung tun könnenPython 2 ,
999694 BytesProbieren Sie es online!
3 Bytes von Jo King .
Nimmt die Eingabe als: leerer Knoten ist
[]
, und andere Knoten sind[<value>, <leftNode>, <rightNode>]
. Ausgänge0/1
für False / True.quelle