Menu
CoddyTech

Range Sum of BST

Uma árvore de busca binária é armazenada no array tree em ordem por níveis: a raiz está no índice 0, os filhos do nó no índice i estão em 2*i+1 (à esquerda) e 2*i+2 (à direita), e -1 indica uma posição vazia. Em uma árvore de busca binária, todo valor na subárvore esquerda de um nó é menor que o valor do nó, e todo valor na subárvore direita é maior.

Retorne a soma dos valores de todos os nós v para os quais low ≤ v ≤ high, ou 0 quando não houver nenhum.

Função

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
a árvore binária de busca em ordem por nível, com -1 para um espaço vazio
lowinteger
o menor valor a contar
highinteger
o maior valor a ser contado
Retornainteger
a soma dos valores dos nós entre low e high, incluindo ambos

Restrições

  • 1 ≤ tree.length ≤ 32767
  • Cada tree[i] é -1 ou um valor com 0 ≤ tree[i] ≤ 105.
  • tree[0] nunca é -1, então a árvore tem pelo menos um nó.
  • O array pode terminar com entradas -1 extras após o último nó.
  • Ambos os filhos de um espaço vazio também estão vazios, e a profundidade é no máximo 14.
  • A árvore é uma árvore binária de busca válida, portanto todos os seus valores são distintos.
  • 0 ≤ low ≤ high ≤ 105
  • A resposta cabe em um inteiro com sinal de 32 bits.

Exemplos

Entrada
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
Saída
88
Explicação
Os valores de 9 a 31 são 10, 12, 15, 20 e 31, que somam 88. 3, 8 e 40 ficam fora do intervalo.
challenge icon

Para ir além

Se você tivesse que responder a milhares de consultas diferentes (low, high) na mesma árvore, como poderia responder a cada uma em tempo O(log n)?

Redefinir código
def rangeSumBST(tree, low, high):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

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

Saída Esperada

88