Menu
CoddyTech

Range Sum of BST

Recibes un árbol binario de búsqueda almacenado en el arreglo tree por niveles, y dos números low y high. La raíz está en el índice 0, los hijos del nodo en el índice i están en 2*i+1 (izquierda) y 2*i+2 (derecha), -1 marca un espacio vacío y el arreglo puede terminar con entradas -1 adicionales. En un árbol binario de búsqueda, cada valor del subárbol izquierdo de un nodo es menor que el valor del nodo, y cada valor de su subárbol derecho es mayor.

Escribe una función llamada rangeSumBST que devuelva la suma de todos los valores de los nodos v que cumplan low ≤ v ≤ high, o 0 cuando ningún valor esté dentro de ese rango.

Función

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
el árbol binario de búsqueda en orden por niveles, con -1 para una posición vacía
lowinteger
el valor más pequeño que se debe contar
highinteger
el valor más grande que se debe contar
Devuelveinteger
la suma de los valores de los nodos entre low y high, ambos incluidos

Restricciones

  • 1 ≤ tree.length ≤ 32767
  • Cada tree[i] es -1 o un valor con 0 ≤ tree[i] ≤ 105.
  • tree[0] nunca es -1, así que el árbol tiene al menos un nodo.
  • El arreglo puede terminar con entradas -1 adicionales después del último nodo.
  • Ambos hijos de un espacio vacío también están vacíos, y la profundidad es como máximo 14.
  • El árbol es un árbol binario de búsqueda válido, por lo que todos sus valores son distintos.
  • 0 ≤ low ≤ high ≤ 105
  • La respuesta cabe en un entero con signo de 32 bits.

Ejemplos

Entrada
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
Salida
88
Explicación
Los valores de 9 a 31 son 10, 12, 15, 20 y 31, que suman 88. 3, 8 y 40 quedan fuera del rango.

lock icon+14 pruebas ocultas al enviar

challenge icon

Para ir más allá

Si tuvieras que responder miles de consultas distintas (low, high) sobre el mismo árbol, ¿cómo podrías responder cada una en O(log n) de tiempo?

Restablecer código
def rangeSumBST(tree, low, high):
    # Escribe el código aquí
Casos de prueba

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