שאלת מבחן במבני נתונים ומבוא לאלגוריתמים - האוניברסיטה הפתוחה 2019 - עצי חיפוש
נגדיר את המבנה של עץ בינרי אוגר – עץ בינרי המכיל בכל צומת שדה אוגר (בנוסף למפתח כמובן).
בהינתן עץ בינרי אוגר , ניתן לבנות ממנו עץ בינרי רגיל : עבור כל צומת ב-, מחברים את הערך לכל המפתחות בתת-העץ המושרש ב-; נאמר ש- מייצג את .
כתבו אלגוריתם הרץ בזמן , המבדק אם עץ הבינרי האוגר מייצג עץ חיפוש בינרי.
בהינתן עץ בינרי אוגר , ניתן לבנות ממנו עץ בינרי רגיל : עבור כל צומת ב-, מחברים את הערך לכל המפתחות בתת-העץ המושרש ב-; נאמר ש- מייצג את .
כתבו אלגוריתם הרץ בזמן , המבדק אם עץ הבינרי האוגר מייצג עץ חיפוש בינרי.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
שאלה חוזרתהאוניברסיטה הפתוחהמבחן סמסטר ב2019 סמסטר ב | 2019 סמסטר ב
★★★★★
עצי חיפושאלגוריתמיםרקורסיה
בצעו מעבר inorder על העץ. עקבו אחרי סכום מצטבר של ערכי מהשורש לצומת הנוכחי. המפתח האמיתי של כל צומת הוא + סכום ה- בנתיב מהשורש אליו. בדקו שהמפתחות האמיתיים בסדר עולה.
הרעיון: נבצע מעבר inorder, כאשר בכל צומת נחשב את המפתח האמיתי (key + סכום ה-add מהשורש). נבדוק שהמפתחות האמיתיים עולים.
הערה:
סיבוכיות: מעבר inorder מבקר כל צומת בדיוק פעם אחת, ובכל צומת מבצע עבודה. סה"כ .
IS-BST(A):
prev = -∞
return CHECK(root[A], 0)
CHECK(z, cumulative_add):
if z == NIL:
return TRUE
cumulative_add = cumulative_add + add[z]
// בדיקת תת-עץ שמאלי
if not CHECK(left[z], cumulative_add):
return FALSE
// בדיקת הצומת הנוכחי
real_key = key[z] + cumulative_add
if real_key ≤ prev:
return FALSE
prev = real_key
// בדיקת תת-עץ ימני
return CHECK(right[z], cumulative_add)
הערה:
prev הוא משתנה גלובלי.סיבוכיות: מעבר inorder מבקר כל צומת בדיוק פעם אחת, ובכל צומת מבצע עבודה. סה"כ .