Menu
CoddyTech

Range Sum of BST

עץ חיפוש בינארי מאוחסן במערך tree לפי סדר רמות: השורש נמצא באינדקס 0, הילדים של הצומת באינדקס i נמצאים ב-2*i+1 (משמאל) וב-2*i+2 (מימין), ו--1 מסמן מקום ריק. בעץ חיפוש בינארי, כל ערך בתת-העץ השמאלי של צומת קטן מערך הצומת, וכל ערך בתת-העץ הימני שלו גדול יותר.

החזר את סכום הערכים של כל הצמתים v שעבורם low ≤ v ≤ high, או 0 אם אין כאלה.

פונקציה

rangeSumBST(tree: integer-array, low: integer, high: integer) → integer
treeinteger-array
עץ החיפוש הבינארי בסדר רמות, עם ‎-1 עבור מקום ריק
lowinteger
הערך הקטן ביותר שיש לספור
highinteger
הערך הגדול ביותר לספירה
מחזירהinteger
סכום ערכי הצמתים בין low ל-high, כולל שניהם

אילוצים

  • 1 ≤ tree.length ≤ 32767
  • כל tree[i] הוא -1 או ערך שמקיים 0 ≤ tree[i] ≤ 105.
  • tree[0] לעולם אינו -1, ולכן יש בעץ לפחות צומת אחד.
  • המערך עשוי להסתיים בערכי -1 נוספים אחרי הצומת האחרון.
  • גם שני הילדים של מקום ריק ריקים, והעומק הוא לכל היותר 14.
  • העץ הוא עץ חיפוש בינארי תקין, ולכן כל הערכים בו שונים זה מזה.
  • 0 ≤ low ≤ high ≤ 105
  • התשובה נכנסת למספר שלם signed של 32 סיביות.

דוגמאות

קלט
tree = [20, 8, 31, 3, 12, -1, 40, -1, -1, 10, 15]low = 9high = 31
פלט
88
הסבר
הערכים מ־9 עד 31 הם 10, 12, 15, 20 ו־31, שסכומם 88. 3, 8 ו־40 נמצאים מחוץ לטווח.
challenge icon

שאלת המשך

אם היית צריך לענות על אלפי שאילתות שונות של (low, high) באותו עץ, איך היית יכול לענות על כל אחת מהן בזמן O(log n)?

איפוס הקוד
def rangeSumBST(tree, low, high):
    # כתבו כאן את הקוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

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

הפלט הצפוי

88