תכנות, רקורסיה, מערכים, מחרוזות, עצים בינאריים ורשימות מקושרות
5
/ \
1 8
\ / \
2 6 9
/
7
BinarySearchTree את השיטה searchPathString(T element) אשר מקבלת איבר element ומחזירה את מחרוזת החיפוש של element בעץ.BinarySearchNode. השיטה במחלקה זו מקבלת איבר element ופרמטר נוסף אותו עליכם לקבוע.TreeNode ו-BinarySearchTree יכילו את השדות הבאים (השינוי מהכיתה מסומן בקו תחתון):>>> print(tree.root.right.key_range) → (19, 38)update_key_range() למחלקה TreeNode, שתעדכן את השדה key_range של הצומת לערכיו התקינים לפי ההגדרה שצוינה.update_all_key_range(self) אשר מעדכנת את טווחי המפתחות בכל הצמתים בעץ, תוך שימוש במתודה שמומשה בסעיף א'. הקוד הבא מציע מימוש:update_key_range_2.update_all_key_range, אך ורק על ידי החלפת הקריאה ל-update_key_range בקריאה ל-update_key_range_2.update_all_key_range במקרה הגרוע כתלות בכמות הצמתים (). בנוסף, ציינו האם הקוד נכון, ואם אינו נכון הציעו תיקון (בקצרה).treeComparator) וכמו כן הוא "קטן" מכל הערכים בתת-העץ הימני שלו. בעץ אין איברים שווים.BinarySearchNode<T>, כמפורט בסעיפים א' וב'. בנוסף, עומדות לרשותכם שתי שיטות בהן תוכלו להיעזר כרצונכם:T findMin() מחזירה את הערך המינימלי בתת-העץ המושרש בקודקוד הנוכחי.T findMax() מחזירה את הערך המקסימלי בתת-העץ המושרש בקודקוד הנוכחי.private boolean replace(T newData) אשר מקבלת ערך newData ובודקת האם ניתן להחליף בינו לערך השדה data כך שתת העץ המושרש בקודקוד הנוכחי נשאר עץ חיפוש בינארי. אם התשובה חיובית, השיטה מבצעת את ההחלפה ומחזירה true. אחרת השיטה מחזירה false, וערך השדה data אינו משתנה.return מעבר לפקודה הניתנת בתבנית (השורה האחרונה בשיטה). 7
/ \\
2 11
/ \ \\
1 4 13
\\
14
true כי אם מחליפים את ערכו של השורש ב-5 תת-העץ המושרש בו נשאר עץ חיפוש בינארי.false והעץ לא ישתנה, כי תת-העץ המתקבל לאחר החלפת ערכו של השורש ב-3, 12 או 0 איננו עץ חיפוש בינארי.public boolean replace(T replaceMe, T newData) המקבלת שני ערכים replaceMe ו-newData.replaceMe בערך newData אם ניתן לעשות זאת - ניתן לבצע את ההחלפה אם קיים קודקוד בתת העץ שערכו replaceMe ולאחר ההחלפה העץ נשאר עץ חיפוש בינארי.false.node:node:
7
/ \\
2 11
/ \ \\
1 4 13
\\
14
node.replace(2,3):
7
/ \\
3 11
/ \ \\
1 4 13
\\
14
node.replace(2, 3) יוחזר הערך true ויתקבל תת העץ מימין.node.replace(2, 6) יוחזר הערך false ולא יבוצע שינוי בעץ מאחר שאם תתבצע ההחלפה העץ לא יישאר עץ חיפוש בינארי.node.replace(5, 6) יוחזר false ולא יבוצע שינוי בעץ מאחר שלא קיים בתת-העץ שמושרש ב-node קודקוד שערכו 5.return מעבר לפקודה הניתנת בתבנית (השורה האחרונה בשיטה).| המספר | הייצוג העשרוני |
|---|---|
TreeNode ו-BinarySearchTree יכילו את השדות הבאים (השינוי מהכיתה מסומן בקו תחתון):update_key_range() למחלקה TreeNode, שתעדכן את השדה של הצומת לערכיו התקינים לפי ההגדרה שצוינה. הנחה: על המימוש להיות יעיל ככל שניתן מבחינת סיבוכיות זמן אסימפטוטית כתלות בעומק העץ.BinarySearchTree את המתודה update_all_key_range(self) אשר מעדכנת את טווחי המפתחות בכל הצמתים בעץ, תוך שימוש במתודה שמומשה בסעיף א'. הקוד הבא מציע מימוש למתודה זו:update_key_range של המחלקה TreeNode. השם של המימוש החדש יהיה update_key_range_2. הנחה שתקפה לסעיף זה בלבד: הילדים הישירים של הצומת אותו מעדכנים, כבר מכילים ערכים תקינים בשדה . הנחה: על המימוש להיות יעיל ככל שניתן מבחינת סיבוכיות זמן אסימפטוטית כתלות במספר הצמתים בעץ.update_all_key_range, אך ורק על-ידי החלפת הקריאה ל-update_key_range בקריאה ל-update_key_range_2. ציינו מה סיבוכיות זמן הריצה של המתודה המעודכנת update_all_key_range במקרה הגרוע כתלות בכמות הצמתים (). בנוסף, ציינו האם הקוד נכון, ואם אינו נכון הציעו תיקון (בקצרה).binary search tree) המכיל צמתים בדיוק, שהערכים שלהם הם כל המספרים השלמים בין ל-. (כל ערך מופיע פעם אחת בלבד בעץ).binary search tree) המכיל 5 צמתים בדיוק, שהערכים שלהם הם כל המספרים השלמים בין 1 ל- 5. (כל ערך מופיע פעם אחת בלבד בעץ).a, b, c שונים זה מזה, כאשר a הוא הערך הקטן ביותר ו- c הוא הגדול ביותר. אלו הם הערכים שנמצאים בעץ.a.b.c.BinaryTree<T> נתונה כעת השיטה reversedInOrderIterator() המחזירה עצם מהמחלקה הנתונה בסעיף א.inOrderIterator() המחזירה איטראטור In-order רגיל.bst ומספר sum ומחזירה true אם ורק אם קיימים שני מספרים שונים בעץ אשר סכומם הוא sum. הסדר על המספרים בעץ הוא הסדר הטבעי של המספרים.bst שבאיור, הקוד הבא ידפיס את התשובות שבהערה:bst יש לפחות שני קודקודים וכל המספרים בו שונים זה מזה ואינם null.Iterator, Integer או על משתנים פרימיטיביים בלבד.שאלות תרגול במבוא למדעי המחשב בנושא עץ חיפוש בינארי ממבחנים של האוניברסיטה הפתוחה, אוניברסיטת תל אביב, אוניברסיטת בר-אילן, הטכניון. השאלות ממוינות לפי רמת קושי, עם פתרונות לבדיקה עצמית - כך שניתן ללמוד מטעויות ולהבין את דרך הפתרון לפני הבחינה. ניתן לאתר שאלות חוזרות ולהריץ מבחני סימולציה ממוקדים בנושא עץ חיפוש בינארי.