Menu
CoddyTech

Kth Smallest Element in a BST

Du erhältst einen binären Suchbaum als Array root in Heap-Reihenfolge: Die Wurzel befindet sich am Index 0, die Kinder des Index i befinden sich bei 2*i+1 (links) und 2*i+2 (rechts), und -1 kennzeichnet eine leere Stelle. Das Array kann mit zusätzlichen -1-Einträgen enden. Bei jedem Knoten enthält der linke Teilbaum nur kleinere Werte und der rechte Teilbaum nur größere Werte.

Gib den k-kleinsten Wert im Baum zurück, wobei ab 1 gezählt wird.

Funktion

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
der binäre Suchbaum in Ebenenreihenfolge, mit -1 für eine leere Stelle
kinteger
die zu findende Position in aufsteigender Reihenfolge, beginnend bei 1
Gibt zurückinteger
der k-kleinste Wert im Baum

Einschränkungen

  • 1 ≤ root.length ≤ 32767
  • Jedes root[i] ist -1 oder ein Wert mit 0 ≤ root[i] ≤ 105.
  • root[0] ist niemals -1, daher hat der Baum mindestens einen Knoten.
  • Das Array kann nach dem letzten Knoten mit zusätzlichen -1-Einträgen enden.
  • Beide Kinder eines leeren Platzes sind ebenfalls leer, und die Tiefe beträgt höchstens 14.
  • Die Ordnungsregel gilt an jedem Knoten, daher kommt kein Wert doppelt vor.
  • 1 ≤ k ≤ die Anzahl der Knoten im Baum.

Beispiele

Eingabe
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
Ausgabe
29
Erklärung
In aufsteigender Reihenfolge lauten die Werte 6, 17, 22, 29, 41, 65, 90, und der vierte ist 29. Er ist der größte der vier Werte im linken Teilbaum der Wurzel.
challenge icon

Weiterführende Frage

Wenn sich der Baum häufig ändert und du oft nach dem k-kleinsten Wert gefragt wirst, was könnte jeder Knoten speichern, damit jede Abfrage O(h) benötigt?

Code zurücksetzen
def kthSmallest(root, k):
    # Schreibe hier Code

Test #1

Test #2

Argumente

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

Erwartete Ausgabe

29