Menu
CoddyTech

Range Sum of BST

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

כתבו פונקציה בשם rangeSumBST שמחזירה את סכום כל ערכי הצמתים 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
  • התשובה מתאימה למספר שלם מסומן בן 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 נמצאים מחוץ לטווח.

lock icon+14 בדיקות נסתרות בשליחה

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