Menu
CoddyTech

Range Sum of BST

Você recebe uma árvore binária de busca armazenada no array tree em ordem por nível, e dois números low e high. A raiz fica no índice 0, os filhos do nó no índice i ficam em 2*i+1 (à esquerda) e 2*i+2 (à direita), -1 marca uma posição vazia, e o array pode terminar com entradas extras -1. Em uma árvore binária de busca, todo valor na subárvore esquerda de um nó é menor que o valor do nó, e todo valor na subárvore direita é maior.

Escreva uma função chamada rangeSumBST que retorne a soma de todos os valores dos nós v tais que low ≤ v ≤ high, ou 0 quando nenhum valor estiver nesse intervalo.

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 uma posição vazia
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, então 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 estão fora do intervalo.

lock icon+14 testes ocultos ao enviar

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
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

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

Esperado

88