Hintergrund
Ein binärer Baum ist ein Stammbaum, dessen Knoten höchstens zwei untergeordnete Knoten haben.
Ein beschrifteter Binärbaum ist ein Binärbaum, dessen jeder Knoten mit einer positiven ganzen Zahl beschriftet ist. Außerdem sind alle Bezeichnungen unterschiedlich .
Ein BST (Binary Search Tree) ist ein beschrifteter Binärbaum, bei dem die Bezeichnung jedes Knotens größer ist als die Bezeichnung aller Knoten in seinem linken Teilbaum und kleiner als die Bezeichnung aller Knoten in seinem rechten Teilbaum. Das Folgende ist zum Beispiel eine BST:
Das Durchlaufen eines markierten Binärbaums vor der Bestellung wird durch den folgenden Pseudocode definiert.
function preorder(node)
if node is null then
return
else
print(node.label)
preorder(node.left)
preorder(node.right)
Sehen Sie sich das folgende Bild an, um eine bessere Intuition zu erhalten:
Die Eckpunkte dieses Binärbaums werden in der folgenden Reihenfolge gedruckt:
F, B, A, D, C, E, G, I, H
Sie können mehr über BSTs lesen hier , und mehr über Pre-Order Traversal hier .
Herausforderung
Wenn Sie eine Liste von ganzen Zahlen , müssen Sie feststellen, ob es eine BST gibt, deren Traversal vorbestellt genau ausgibt .
Eingang
- Eine nicht leere Liste eindeutiger positiver Ganzzahlen .
- Optional kann die Länge von .
Ausgabe
- Ein wahrer Wert, wenn das Durchlaufen einer BST vorbestellt.
- Ein falscher Wert sonst.
Regeln
- Es gelten die Standardregeln für gültige Einreichungen , E / A und Lücken .
- Das ist Code-Golf , also gewinnt die kürzeste Lösung (in Bytes). Lassen Sie sich wie üblich nicht von lächerlich kurzen Lösungen in Golfsprachen davon abhalten, eine längere Antwort in der Sprache Ihrer Wahl zu verfassen.
- Dies ist keine Regel, aber Ihre Antwort wird besser angenommen, wenn sie einen Link zum Testen der Lösung und eine Erklärung zur Funktionsweise enthält.
Beispiele
Input ----> Output
[1] ----> True
[1,2,3,4] ----> True
[5,1,4,2,3] ----> True
[5,4,3,2,1,6,7,8,9] ----> True
[4,2,1,3,6,5,7] ----> True
[8,3,1,6,4,7,10,14,13] ----> True
[2,3,1] ----> False
[6,3,2,4,5,1,8,7,9] ----> False
[1,2,3,4,5,7,8,6] ----> False
[3,1,4,2] ----> False
Schauen Sie sich diesen Link an (mit freundlicher Genehmigung von Kevin Cruijssen ), um sich die Beispiele anzusehen.