Menu
CoddyTech

Range Sum of BST

Ti viene fornito un albero binario di ricerca memorizzato nell'array tree in ordine per livelli, e due numeri low e high. La radice si trova all'indice 0, i figli del nodo all'indice i si trovano agli indici 2*i+1 (sinistro) e 2*i+2 (destro), -1 indica una posizione vuota e l'array può terminare con ulteriori elementi -1. In un albero binario di ricerca, ogni valore nel sottoalbero sinistro di un nodo è minore del valore del nodo, mentre ogni valore nel sottoalbero destro è maggiore.

Scrivi una funzione chiamata rangeSumBST che restituisca la somma di tutti i valori dei nodi v tali che low ≤ v ≤ high, oppure 0 se nessun valore rientra in quell'intervallo.

Funzione

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
l'albero binario di ricerca in ordine per livelli, con -1 per una posizione vuota
lowinteger
il valore più piccolo da contare
highinteger
il valore più grande da contare
Restituisceinteger
la somma dei valori dei nodi compresi tra low e high, inclusi

Vincoli

  • 1 ≤ tree.length ≤ 32767
  • Ogni tree[i] è -1 oppure un valore con 0 ≤ tree[i] ≤ 105.
  • tree[0] non è mai -1, quindi l’albero ha almeno un nodo.
  • L'array può terminare con voci -1 aggiuntive dopo l'ultimo nodo.
  • Entrambi i figli di una posizione vuota sono vuoti a loro volta, e la profondità è al massimo 14.
  • L'albero è un albero binario di ricerca valido, quindi tutti i suoi valori sono distinti.
  • 0 ≤ low ≤ high ≤ 105
  • La risposta è rappresentabile in un intero con segno a 32 bit.

Esempi

Input
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
Output
88
Spiegazione
I valori da 9 a 31 sono 10, 12, 15, 20 e 31, che sommati danno 88. 3, 8 e 40 sono fuori dall’intervallo.

lock icon+14 test nascosti all’invio

challenge icon

Per approfondire

Se dovessi rispondere a migliaia di query diverse (low, high) sullo stesso albero, come potresti rispondere a ciascuna in tempo O(log n)?

Ripristina il codice
def rangeSumBST(tree, low, high):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

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

Atteso

88