Menu
CoddyTech

Lowest Common Ancestor of a BST

Du erhältst einen binären Suchbaum, der im Array tree in Ebenenreihenfolge gespeichert ist, sowie zwei Werte p und q, die beide darin vorkommen. Die Wurzel befindet sich am Index 0, die Kinder des Knotens am Index i befinden sich an den Indizes 2*i+1 (links) und 2*i+2 (rechts), -1 kennzeichnet eine leere Stelle, und das Array kann mit zusätzlichen -1-Einträgen enden. In einem binären Suchbaum ist jeder Wert im linken Teilbaum eines Knotens kleiner als der Wert des Knotens und jeder Wert in seinem rechten Teilbaum größer.

Schreibe eine Funktion namens lowestCommonAncestor, die den Wert des niedrigsten gemeinsamen Vorfahren von p und q zurückgibt: den tiefsten Knoten, der beide in seinem Teilbaum hat. Ein Knoten zählt zu seinem eigenen Teilbaum. Wenn also p über q liegt, ist die Antwort p selbst.

Funktion

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
den binären Suchbaum in Ebenenreihenfolge, mit -1 für eine leere Stelle
pinteger
den ersten zu findenden Wert
qinteger
den zweiten zu findenden Wert
Gibt zurückinteger
der Wert des tiefsten Knotens, der sowohl p als auch q in seinem Teilbaum hat

Einschränkungen

  • 1 ≤ tree.length ≤ 32767
  • Jedes tree[i] ist -1 oder ein Wert mit 0 ≤ tree[i] ≤ 105.
  • tree[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 einer leeren Stelle sind ebenfalls leer, und die Tiefe beträgt höchstens 14.
  • Der Baum ist ein gültiger binärer Suchbaum, daher sind alle seine Werte verschieden.
  • p und q sind Werte von Knoten im Baum. Sie können in beliebiger Reihenfolge auftreten und gleich sein.

Beispiele

Eingabe
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Ausgabe
8
Erklärung
Die 3 ist das linke Kind von 8, und die 15 hängt unter 12 rechts von 8. Wenn man von beiden aus nach oben steigt, ist der erste Knoten, den beide erreichen, 8; das ist also die Antwort. Die Wurzel 20 ist ebenfalls ein gemeinsamer Vorfahr, liegt aber höher.

lock icon+12 versteckte Tests beim Einreichen

challenge icon

Weiterführende Frage

Was würdest du ändern, wenn p oder q möglicherweise im Baum fehlen und die Funktion in diesem Fall -1 zurückgeben müsste?

Code zurücksetzen
def lowestCommonAncestor(tree, p, q):
    # Schreibe hier den Code
Testfälle

Fall 1

Fall 2

Fall 3

Eingabe

tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]
p = 3
q = 15

Erwartet

8