Menu
CoddyTech

Range Sum of BST

Drzewo binarne wyszukiwań jest przechowywane w tablicy tree w porządku poziomami: 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), a -1 oznacza puste miejsce. W drzewie binarnym wyszukiwań 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.

Zwróć sumę wartości wszystkich węzłów v, dla których low ≤ v ≤ high, lub 0, jeśli takich wartości nie ma.

Funkcja

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
drzewo wyszukiwań binarnych w porządku poziomami, z -1 oznaczającym puste miejsce
lowinteger
najmniejsza wartość, którą należy policzyć
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żdy element tree[i] to -1 lub wartość spełniająca 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 binarnym drzewem wyszukiwania, 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 nie mieszczą się w tym zakresie.
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

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

88