תכנות, רקורסיה, מערכים, מחרוזות, עצים בינאריים ורשימות מקושרות
IntegerBinaryTree, IntegerBinaryNode, המחלקות את המרחיבות BinaryTree<Integer>, BinaryNode<Integer> בהתאמה.IntegerBinaryTree את השיטה הבוליאנית pathSum(int sum) אשר מקבלת מספר שלם sum ומחזירה ערך true אם קיים מסלול כלשהו בעץ מהשורש לעלה אשר סכום המספרים בקודקודי המסלול הוא בדיוק sum. אם לא קיים מסלול כזה השיטה מחזירה ערך false (5 נקודות).IntegerBinaryNode (10 נקודות). 5
/ \
1 7
/ / \
6 2 9
/
4
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 מעבר לפקודה הניתנת בתבנית (השורה האחרונה בשיטה). 1
/ \
2 0
/ / \
0 2 3
\
1
0
/ \
0 0
/ \ / \
1 1 1 1
/
0
Node שלהלן מממשת צומת בעץ בינרי.BinaryTree מאגדת בתוכה שיטות סטטיות לטיפול בעץ בינרי.find1, find2 ו- find3 הבאות:root: 8
/ \
11 6
/ \ \
4 2 13
/ / \
10 3 25
|
19
find1 בעקבות הקריאה BinaryTree.find1(root, 10)?find1 באופן כללי כשהיא מקבלת כפרמטרים: שורש של עץ בינרי root, שכל הערכים בצמתיו שונים זה מזה, ומספר שלם num כלשהו? שימו לב, עליכם לתת תיאור ממצה של מה עושה השיטה באופן כללי, ולא תיאור של מה עושה כל שורה בשיטה, או איך היא מבצעת זאת. כלומר, לכתוב בקצרה מה משמעות הערך שהשיטה מחזירה. התייחסו למקרי קצה.find2 בעקבות הקריאה BinaryTree.find2(root, 3, 2)?find2 באופן כללי כשהיא מקבלת כפרמטרים: שורש של עץ בינרי root, שכל הערכים בצמתיו שונים זה מזה, ושני מספרים שלמים ו-? שימו לב, עליכם לתת תיאור ממצה של מה עושה השיטה באופן כללי, ולא תיאור של מה עושה כל שורה בשיטה, או איך היא מבצעת זאת. כלומר, לכתוב בקצרה מה משמעות הערך שהשיטה מחזירה. התייחסו למקרי קצה.find3 בעקבות הקריאה BinaryTree.find3(root, 3, 13)?find3 באופן כללי כשהיא מקבלת כפרמטרים: שורש של עץ בינרי root, שכל הערכים בצמתיו שונים זה מזה, ושני מספרים שלמים ו-? שימו לב, עליכם לתת תיאור ממצה של מה עושה השיטה באופן כללי, ולא תיאור של מה עושה כל שורה בשיטה, או איך היא מבצעת זאת. כלומר, לכתוב בקצרה מה משמעות הערך שהשיטה מחזירה. התייחסו למקרי קצה.Node שלהלן מממשת צומת בעץ בינרי.BinaryTree מאגדת בתוכה שיטות סטטיות לטיפול בעץ בינרי.something ו- what הכתובות בעמודים הבאים:root: 100
/ \
50 6
/ \ \
120 2 13
/ \ \
10 3 25
\
19
something בעקבות הקריאה BinaryTree.something(root)?something באופן כללי כשהיא מקבלת כפרמטר שורש של עץ בינרי root? שימו לב, עליכם לתת תיאור ממצה של מה עושה השיטה באופן כללי, ולא תיאור של מה עושה כל שורה בשיטה, או איך היא מבצעת זאת. כלומר, לכתוב בקצרה מה משמעות הערך שהשיטה מחזירה. התייחסו למקרי קצה.what בעקבות הפעלת שתי הפקודות להלן:what באופן כללי כשהיא מקבלת כפרמטר שורש של עץ בינרי root ומספר שלם num כלשהו? שימו לב, עליכם לתת תיאור ממצה של מה עושה השיטה באופן כללי, ולא תיאור של מה עושה כל שורה בשיטה, או איך היא מבצעת זאת. כלומר, לכתוב בקצרה השיטה מדפיסה. התייחסו למקרי קצה.שאלות תרגול במבוא למדעי המחשב בנושא עצים בינאריים ממבחנים של האוניברסיטה הפתוחה, אוניברסיטת תל אביב, אוניברסיטת בר-אילן, הטכניון. השאלות ממוינות לפי רמת קושי, עם פתרונות לבדיקה עצמית - כך שניתן ללמוד מטעויות ולהבין את דרך הפתרון לפני הבחינה. ניתן לאתר שאלות חוזרות ולהריץ מבחני סימולציה ממוקדים בנושא עצים בינאריים.