Menu
CoddyTech

Range Sum of BST

Otrzymujesz drzewo binarnych poszukiwań zapisane w tablicy tree w kolejności poziomami oraz dwie liczby low i high. Korzeń znajduje się pod indeksem 0, dzieci węzła pod indeksem 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 drzewie binarnych poszukiwań 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 funkcję o nazwie rangeSumBST, która zwraca sumę wszystkich wartości węzłów v, dla których low ≤ v ≤ high, albo 0, gdy żadna wartość nie mieści się w tym zakresie.

Funkcja

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
drzewo binarne wyszukiwań w kolejności poziomami, z -1 oznaczającym puste miejsce
lowinteger
najmniejsza wartość do zliczenia
highinteger
największa wartość do zliczenia
Zwracainteger
suma wartości węzłów od low do high włącznie

Ograniczenia

  • 1 ≤ tree.length ≤ 32767
  • Każde tree[i] ma wartość -1 albo 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 prawidłowym drzewem wyszukiwania binarnego, więc wszystkie jego wartości są różne.
  • 0 ≤ low ≤ high ≤ 105
  • Odpowiedź mieści się w 32-bitowej liczbie całkowitej ze znakiem.

Przykłady

Wejście
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
Wyjście
88
Wyjaśnienie
Wartości od 9 do 31 to 10, 12, 15, 20 i 31, które sumują się do 88. 3, 8 i 40 znajdują się poza zakresem.

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

challenge icon

Pytanie dodatkowe

Gdyby trzeba było odpowiadać na tysiące różnych zapytań (low, high) dotyczących tego samego drzewa, jak można by odpowiadać na każde z nich w czasie O(log n)?

Zresetuj kod
def rangeSumBST(tree, low, high):
    # Wpisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]
low = 9
high = 31

Oczekiwane

88