Menu
CoddyTech

Validate Binary Search Tree

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

כתבו את isValidBST, שמחזירה true אם העץ הוא עץ חיפוש בינארי, ואחרת מחזירה false. בעץ חיפוש בינארי, הערך של כל צומת גדול ממש מכל ערך בתת־העץ השמאלי שלו וקטן ממש מכל ערך בתת־העץ הימני שלו.

פונקציה

isValidBST(tree: integer-array) → boolean
treeinteger-array
העץ הבינארי לפי סדר רמות, כאשר ‎-1 מציין מקום ריק
מחזירהboolean
אמת אם העץ הוא עץ חיפוש בינארי, אחרת שקר

אילוצים

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

דוגמאות

קלט
tree = [8, 3, 12, 1, 6, 10, 15]
פלט
true
הסבר
כשקוראים לפי הסדר (תת-העץ השמאלי, הצומת, תת-העץ הימני), הערכים הם 1, 3, 6, 8, 10, 12, 15. הם גדלים באופן строго, ולכן כל צומת נמצא בצד הנכון של כל אחד מאבותיו.
challenge icon

שאלת המשך

ההורה של צומת נמצא באינדקס (i-1)/2, בעיגול כלפי מטה. האם תוכל לעבור על העץ לפי הסדר עם שטח נוסף O(1), באמצעות מעבר דרך ההורים במקום שימוש במחסנית או ברקורסיה?

איפוס הקוד
def isValidBST(tree):
    # כתבו כאן את הקוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנט

tree = [8, 3, 12, 1, 6, 10, 15]

הפלט הצפוי

true