Menu
CoddyTech

Range Sum of BST

On vous donne un arbre binaire de recherche stocké dans le tableau tree en parcours par niveaux, ainsi que deux nombres low et high. La racine se trouve à l’indice 0, les enfants du nœud à l’indice i se trouvent aux indices 2*i+1 (à gauche) et 2*i+2 (à droite), -1 indique un emplacement vide, et le tableau peut se terminer par des entrées -1 supplémentaires. Dans un arbre binaire de recherche, chaque valeur du sous-arbre gauche d’un nœud est inférieure à la valeur de ce nœud, et chaque valeur de son sous-arbre droit est supérieure.

Écrivez une fonction nommée rangeSumBST qui renvoie la somme de toutes les valeurs de nœud v telles que low ≤ v ≤ high, ou 0 si aucune valeur ne se trouve dans cet intervalle.

Fonction

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
l’arbre binaire de recherche par ordre de niveaux, avec -1 pour une place vide
lowinteger
la plus petite valeur à compter
highinteger
la plus grande valeur à compter
Renvoieinteger
la somme des valeurs des nœuds comprises entre low et high, bornes incluses

Contraintes

  • 1 ≤ tree.length ≤ 32767
  • Chaque tree[i] est -1 ou une valeur telle que 0 ≤ tree[i] ≤ 105.
  • tree[0] n’est jamais -1, donc l’arbre contient au moins un nœud.
  • Le tableau peut se terminer par des entrées -1 supplémentaires après le dernier nœud.
  • Les deux enfants d’un emplacement vide sont également vides, et la profondeur est au plus de 14.
  • L’arbre est un arbre binaire de recherche valide, donc toutes ses valeurs sont distinctes.
  • 0 ≤ low ≤ high ≤ 105
  • La réponse tient dans un entier signé de 32 bits.

Exemples

Entrée
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
Sortie
88
Explication
Les valeurs de 9 à 31 sont 10, 12, 15, 20 et 31, dont la somme est 88. Les valeurs 3, 8 et 40 sont en dehors de l’intervalle.

lock icon+14 tests cachés à la soumission

challenge icon

Pour aller plus loin

Si tu devais répondre à des milliers de requêtes (low, high) différentes sur le même arbre, comment pourrais-tu répondre à chacune en O(log n) ?

Réinitialiser le code
def rangeSumBST(tree, low, high):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

88