Menu
CoddyTech

Range Sum of BST

Дано бинарное дерево поиска, хранящееся в массиве tree в порядке уровней, и два числа low и high. Корень находится по индексу 0, дочерние узлы узла с индексом i находятся по индексам 2*i+1 (левый) и 2*i+2 (правый), -1 обозначает пустое место, а в конце массива могут быть дополнительные элементы -1. В бинарном дереве поиска каждое значение в левом поддереве узла меньше значения этого узла, а каждое значение в его правом поддереве больше.

Напишите функцию с именем rangeSumBST, которая возвращает сумму значений всех узлов v, для которых low ≤ v ≤ high, или 0, если в этом диапазоне нет значений.

Функция

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
двоичное дерево поиска в порядке по уровням, где -1 обозначает пустое место
lowinteger
наименьшее значение для подсчёта
highinteger
наибольшее значение для подсчёта
Возвращаетinteger
сумма значений узлов от low до high включительно

Ограничения

  • 1 ≤ tree.length ≤ 32767
  • Каждый tree[i] равен -1 или является значением, для которого 0 ≤ tree[i] ≤ 105.
  • tree[0] никогда не равно -1, поэтому в дереве есть как минимум один узел.
  • После последнего узла в массиве могут быть дополнительные элементы -1.
  • Оба потомка пустого места тоже пусты, а глубина не превышает 14.
  • Дерево является корректным двоичным деревом поиска, поэтому все его значения различны.
  • 0 ≤ low ≤ high ≤ 105
  • Ответ помещается в 32-разрядное целое число со знаком.

Примеры

Ввод
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
Вывод
88
Пояснение
Значения от 9 до 31 — это 10, 12, 15, 20 и 31, в сумме дающие 88. 3, 8 и 40 находятся за пределами диапазона.

lock icon+14 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Если бы тебе нужно было отвечать на тысячи разных запросов (low, high) для одного и того же дерева, как бы ты мог отвечать на каждый из них за время O(log n)?

Сбросить код
def rangeSumBST(tree, low, high):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

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

Ожидается

88