Menu
CoddyTech

Range Sum of BST

Du erhältst einen binären Suchbaum, der im Array tree in Ebenenreihenfolge gespeichert ist, sowie zwei Zahlen low und high. Die Wurzel befindet sich am Index 0, die Kinder des Knotens am Index i befinden sich an den Indizes 2*i+1 (links) und 2*i+2 (rechts), -1 kennzeichnet eine leere Stelle, und das Array kann mit zusätzlichen -1-Einträgen enden. In einem binären Suchbaum ist jeder Wert im linken Teilbaum eines Knotens kleiner als der Wert des Knotens, und jeder Wert in seinem rechten Teilbaum ist größer.

Schreibe eine Funktion namens rangeSumBST, die die Summe aller Knotenwerte v mit low ≤ v ≤ high zurückgibt, oder 0, wenn kein Wert in diesem Bereich liegt.

Funktion

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
den binären Suchbaum in Ebenenreihenfolge, wobei -1 für eine leere Stelle steht
lowinteger
der kleinste zu zählende Wert
highinteger
der größte Wert, der gezählt werden soll
Gibt zurückinteger
die Summe der Knotenwerte zwischen low und high, einschließlich beider Werte

Einschränkungen

  • 1 ≤ tree.length ≤ 32767
  • Jeder tree[i] ist -1 oder ein Wert mit 0 ≤ tree[i] ≤ 105.
  • tree[0] ist niemals -1, daher hat der Baum mindestens einen Knoten.
  • Das Array kann nach dem letzten Knoten noch zusätzliche -1-Einträge enthalten.
  • Beide Kinder einer leeren Stelle sind ebenfalls leer, und die Tiefe beträgt höchstens 14.
  • Der Baum ist ein gültiger binärer Suchbaum, daher sind alle seine Werte eindeutig.
  • 0 ≤ low ≤ high ≤ 105
  • Die Antwort passt in eine vorzeichenbehaftete 32-Bit-Ganzzahl.

Beispiele

Eingabe
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
Ausgabe
88
Erklärung
Die Werte von 9 bis 31 sind 10, 12, 15, 20 und 31, was zusammen 88 ergibt. 3, 8 und 40 liegen außerhalb des Bereichs.

lock icon+14 versteckte Tests beim Einreichen

challenge icon

Weiterführende Frage

Wenn du Tausende verschiedener Abfragen (low, high) für denselben Baum beantworten müsstest, wie könntest du jede einzelne in O(log n) Zeit beantworten?

Code zurücksetzen
def rangeSumBST(tree, low, high):
    # Schreibe hier den Code
Testfälle

Fall 1

Fall 2

Fall 3

Eingabe

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

Erwartet

88