Menu
CoddyTech

Range Sum of BST

Un arbre binaire de recherche est stocké dans le tableau tree en ordre par niveaux : 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), et -1 indique une case vide. Dans un arbre binaire de recherche, chaque valeur du sous-arbre gauche d’un nœud est inférieure à la valeur du nœud, et chaque valeur de son sous-arbre droit lui est supérieure.

Renvoyez la somme de toutes les valeurs de nœud v telles que low ≤ v ≤ high, ou 0 s’il n’y en a aucune.

Fonction

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

Contraintes

  • 1 ≤ tree.length ≤ 32767
  • Chaque tree[i] vaut -1 ou une valeur telle que 0 ≤ tree[i] ≤ 105.
  • tree[0] n'est jamais -1, donc l'arbre comporte 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 eux aussi vides, et la profondeur est au plus 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 se situent en dehors de l’intervalle.
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

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

88