Menu
CoddyTech

Lowest Common Ancestor of a BST

Du erhältst einen binären Suchbaum, der in Heap-Reihenfolge im Array tree gespeichert ist: Die Wurzel steht am Index 0, die Kinder des Index i stehen bei 2*i+1 (links) und 2*i+2 (rechts), und -1 kennzeichnet eine leere Stelle. Jeder Wert im linken Teilbaum eines Knotens ist kleiner als der Wert des Knotens, und jeder Wert in seinem rechten Teilbaum ist größer.

Schreibe lowestCommonAncestor, das den Wert des niedrigsten gemeinsamen Vorfahren der Werte p und q zurückgibt, die beide im Baum vorkommen: den tiefsten Knoten, der beide in seinem Teilbaum hat. Ein Knoten ist Teil seines eigenen Teilbaums. Wenn also p über q liegt, lautet die Antwort p.

Funktion

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
der binäre Suchbaum in Ebenenreihenfolge, mit -1 für eine leere Stelle
pinteger
der erste zu findende 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, also 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
Wenn man von 3 und 15 aus nach oben geht, ist der erste Knoten, den beide erreichen, 8: 3 ist sein linkes Kind, und 15 hängt unter 12 auf seiner rechten Seite. Die Wurzel 20 ist ebenfalls ein gemeinsamer Vorfahr, liegt aber höher.
challenge icon

Weiterführende Frage

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

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

Test #1

Test #2

Test #3

Argumente

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

Erwartete Ausgabe

8