Menu
CoddyTech

Lowest Common Ancestor of a BST

ŚrednieDrzewo BSTpython iconjava iconcpp iconc iconjs icon+10

Otrzymujesz binarne drzewo wyszukiwań zapisane w tablicy tree w porządku poziomami oraz dwie wartości p i q, które obie w nim występują. 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), -1 oznacza puste miejsce, a tablica może kończyć się dodatkowymi wpisami -1. W binarnym drzewie wyszukiwań każda wartość w lewym poddrzewie węzła jest mniejsza od wartości węzła, a każda wartość w jego prawym poddrzewie jest większa.

Napisz funkcję o nazwie lowestCommonAncestor, która zwraca wartość najniższego wspólnego przodka węzłów p i q: najgłębszego węzła, który ma oba z nich w swoim poddrzewie. Węzeł jest uznawany za część własnego poddrzewa, więc jeśli p znajduje się wyżej niż q, odpowiedzią jest samo p.

Funkcja

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
drzewo wyszukiwań binarnych 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żdy element tree[i] ma wartość -1 lub wartość spełniającą warunek 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 poprawnym drzewem przeszukiwań binarnych, 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ć sobie 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
3 jest lewym dzieckiem 8, a 15 znajduje się poniżej 12, po prawej stronie 8. Wspinając się od każdego z nich w górę, pierwszym węzłem, do którego docierają oba, jest 8, więc to jest odpowiedź; korzeń 20 również jest wspólnym przodkiem, ale znajduje się wyżej.

lock icon+12 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

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

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

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

8