Menu
CoddyTech

Lowest Common Ancestor of a BST

ŚrednieDrzewo BSTpython iconjava iconcpp iconc iconjs icon+10

Otrzymujesz drzewo binarne przeszukiwania zapisane w tablicy tree w porządku kopca: korzeń znajduje się pod indeksem 0, dzieci węzła o indeksie i znajdują się pod indeksami 2*i+1 (lewe) i 2*i+2 (prawe), a -1 oznacza puste miejsce. Każda wartość w lewym poddrzewie węzła jest mniejsza od wartości tego węzła, a każda wartość w jego prawym poddrzewie jest większa.

Napisz lowestCommonAncestor, która zwraca wartość najniższego wspólnego przodka wartości p i q, z których obie znajdują się w drzewie: najgłębiej położonego węzła, który ma obie wartości w swoim poddrzewie. Węzeł należy do własnego poddrzewa, więc jeśli p znajduje się nad q, odpowiedzią jest p.

Funkcja

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
binarne drzewo wyszukiwań w kolejności poziomami, z -1 oznaczającym puste miejsce
pinteger
pierwsza wartość do znalezienia
qinteger
drugą wartość do znalezienia
Zwracainteger
wartość najgłębszego węzła, który ma zarówno p, jak i q w swoim poddrzewie

Ograniczenia

  • 1 ≤ tree.length ≤ 32767
  • Każde tree[i] ma wartość -1 lub wartość z zakresu 0 ≤ tree[i] ≤ 105.
  • tree[0] nigdy nie jest równe -1, więc drzewo ma co najmniej jeden węzeł.
  • Tablica może kończyć się dodatkowymi wpisami -1 za ostatnim węzłem.
  • Oboje dzieci pustego miejsca również są puste, a głębokość wynosi co najwyżej 14.
  • Drzewo jest prawidłowym binarnym drzewem wyszukiwań, więc wszystkie jego wartości są różne.
  • p i q to wartości węzłów w drzewie. Mogą występować w dowolnej kolejności i mogą być równe.

Przykłady

Wejście
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Wyjście
8
Wyjaśnienie
Wspinając się od 3 i od 15, pierwszym wspólnym węzłem, do którego docierają, jest 8: 3 jest jego lewym dzieckiem, a 15 znajduje się poniżej 12 po jego prawej stronie. Korzeń 20 również jest wspólnym przodkiem, ale znajduje się wyżej.
challenge icon

Pytanie dodatkowe

Co byś zmienić, gdyby w drzewie mogło brakować p lub q, a funkcja musiałaby wtedy zwrócić -1?

Zresetuj kod
def lowestCommonAncestor(tree, p, q):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

8