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, בסדר עולה ממש, וזה מה שעץ חיפוש מספק.

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

challenge icon

שאלת המשך

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

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

מקרה 1

מקרה 2

מקרה 3

קלט

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

צפוי

true