6a3.1. גובה עץ בינארי
עליכם לממש פונקציה בשם CalculateTreeHeight
אשר מקבלת פרמטר אחד:
- tree - מצביע לשורש של עץ בינארי (מסוג BinNode)
הפונקציה צריכה לחשב ולהחזיר את גובה העץ הבינארי הנתון.
דגשים
- גובה עץ מוגדר כמספר הקשתות (edges) מהשורש לצומת העמוק ביותר.
- גובה של עץ עם צומת אחד (שורש בלבד) הוא 0.
- עליכם להשתמש ברקורסיה כדי לפתור את הבעיה.
- יש להשתמש במחלקה BinNode מתוך Unit4.CollectionsLib.
דוגמאות:
- עבור עץ ריק (null), הפונקציה תחזיר: -1
- עבור עץ עם צומת שורש בלבד, הפונקציה תחזיר: 0
- עבור העץ הבא:
5
/
3 8
/ /
1 7
- הפונקציה תחזיר: 2 (הגובה נמדד לפי מספר הקשתות מהשורש לצומת העמוק ביותר)
6a3.2. הדפסת צמתי עץ בינארי בסדר סופי
עליכם לממש פונקציה חיצונית בשם PrintPostOrder
אשר מקבלת פרמטר אחד:
- tree - עץ בינארי (מסוג BinNode) שהצמתים שלו מכילים מספרים שלמים.
הפונקציה צריכה להדפיס את הערכים של כל הצמתים בעץ בסדר Post-Order. כל ערך יודפס בשורה נפרדת.
שימו לב:
- הפונקציה אינה מחזירה ערך (void).
- יש להשתמש במחלקה BinNode עבור העץ.
- ניתן להשתמש בפונקציות עזר של BinTreeUtils ליצירת העץ לצורך בדיקה.
- עבור C#, יש להוסיף using Unit4.CollectionsLib; ו-using Unit4.BinTreeUtilsLib;.
דוגמאות:
עבור העץ הבינארי הבא:
1
/
2 3
/
4 5
הפלט יהיה:
4 5 2 3 1 עבור העץ הבינארי הבא:
10
/
20 30
הפלט יהיה:
20 30 10
6a3.3. הדפסת בנים ימניים בעץ בינארי
עליכם לממש פונקציה חיצונית בשם PrintRightChildren
אשר מקבלת פרמטר אחד:
- t - עץ בינארי של מספרים שלמים (מסוג BinNode).
הפונקציה צריכה להדפיס את הערכים של כל הבנים הימניים בעץ, כל ערך בשורה נפרדת.
דגשים:
- השתמשו במחלקת BinNode מהספרייה Unit4.CollectionsLib.
- תוכלו להשתמש במעבר על העץ (לדוגמה, DFS או BFS) כדי לבקר בכל הצמתים.
- בכל צומת, בדקו אם קיים בן ימני (GetRight() אינו null). אם כן, הדפיסו את ערכו (GetValue()).
דוגמאות:
עבור העץ הבא:
10
/
5 15
/ \ /
2 7 12 18
הפלט יהיה:
15 18 7 (שימו לב שהסדר יכול להשתנות בהתאם לסוג המעבר על העץ. העיקר שכל הבנים הימניים יודפסו.)
עבור העץ הבא:
1
/
2 3
/ /
4 5 6
הפלט יהיה:
3 6
6a3.4. הדפסת עלי עץ בינארי משמאל לימין
עליכם לממש פונקציה חיצונית בשם PrintLeavesLeftToRight
אשר מקבלת פרמטר אחד:
- t - עץ בינארי (מסוג BinNode) שהצמתים שלו הם מטיפוס שלם.
הפונקציה צריכה להדפיס את הערכים של כל העלים בעץ, בסדר משמאל לימין, כאשר כל ערך מופרד ברווח.
הנחיות למימוש:
- השתמשו במחלקת BinNode עבור צמתי העץ.
- פונקציה זו אינה צריכה להחזיר ערך (void).
- יש לוודא שהפלט עומד בפורמט המבוקש (ערכים מופרדים ברווח).
- זכרו לכלול את ההצהרה using Unit4.CollectionsLib; או using Unit4.BinTreeUtilsLib; בראש הקובץ במידת הצורך.
הגדרה של עלה: עלה הוא צומת שאין לו ילדים (לא ילד שמאלי ולא ילד ימני).
דוגמאות:
עבור העץ הבא:
10
/
5 15
/ \ /
2 7 12
הפלט יהיה: 2 7 12
עבור העץ הבא:
1
/
2 3
/
4 5
הפלט יהיה: 4 5
עבור עץ המכיל רק שורש (לדוגמה: 20):
20 הפלט יהיה: 20
6a3.5. הדפסת צמתים קטנים מאביהם בעץ בינארי
עליכם לממש פונקציה חיצונית (לא חלק ממחלקת BinNode) בשם PrintNodesSmallerThanParent
אשר מקבלת פרמטר אחד:
- t - עץ בינארי (מסוג BinNode) שצמתיו מטיפוס שלם.
הפונקציה צריכה לעבור על העץ ולהדפיס את הערך של כל צומת שערכו נמוך מערכו של אביו בעץ. כל ערך יודפס בשורה נפרדת.
דגשים:
- השתמשו ברקורסיה לפתרון הבעיה.
- תצטרכו להעביר את ערך האב כפרמטר נוסף לפונקציה הרקורסיבית.
- עבור השורש של העץ, אין אב, ולכן אין צורך לבדוק את התנאי עבורו. התחילו את הבדיקה מהילדים של השורש.
- השתמשו ב-Console.WriteLine() להדפסה.
- עליכם להשתמש במחלקת BinNode מהספרייה Unit4.CollectionsLib.
דוגמאות:
נתון העץ הבינארי הבא:
10
/
5 15
/ \ /
3 7 12 18
הפלט יהיה:
5 3 7 12
הסבר לדוגמה:
- הצומת 5 (ערך 5) קטן מהאב שלו 10.
- הצומת 3 (ערך 3) קטן מהאב שלו 5.
- הצומת 7 (ערך 7) גדול מהאב שלו 5 (לא יודפס).
- הצומת 15 (ערך 15) גדול מהאב שלו 10 (לא יודפס).
- הצומת 12 (ערך 12) קטן מהאב שלו 15.
- הצומת 18 (ערך 18) גדול מהאב שלו 15 (לא יודפס).
6a3.6. הדפסת צמתים בעלי 2 בנים וערך גדול מאחד מהם
עליכם לממש פונקציה חיצונית (לא חלק ממחלקת BinNode) בשם PrintNodesWithTwoChildrenAndGreaterValue
אשר מקבלת פרמטר אחד:
- tree - מצביע לשורש של עץ בינארי (מסוג BinNode
הפונקציה צריכה לעבור על העץ ולהדפיס את ערכי כל הצמתים המקיימים את שני התנאים הבאים:
- לצומת יש בדיוק שני בנים (גם בן שמאלי וגם בן ימני קיימים).
- ערך הצומת גדול מערך של לפחות אחד מהבנים שלו (כלומר, ערך הצומת גדול מערך הבן השמאלי, או ערך הצומת גדול מערך הבן הימני).
דגשים
- השתמשו במחלקת BinNode מהספרייה Unit4.CollectionsLib.
- הפונקציה צריכה להיות static.
- הדפיסו כל צומת מתאים בשורה נפרדת.
- אין צורך להחזיר ערך מהפונקציה (void).
קוד עזר
לצורך בניית עץ לבדיקה, תוכלו להשתמש בקוד הבא:
BinNode tree.SetLeft(new BinNode) tree.SetRight(new BinNode) tree.GetLeft().SetLeft(new BinNode) tree.GetLeft().SetRight(new BinNode) tree.GetRight().SetLeft(new BinNode) tree.GetRight().SetRight(new BinNode)
דוגמאות:
נתון העץ הבינארי הבא:
10
/
5 15
/ \ /
2 7 12 18
- עבור הצומת 10: יש לו 2 בנים (5, 15). 10 > 5, 10 < 15. התנאי מתקיים (10 גדול מ-5).
- עבור הצומת 5: יש לו 2 בנים (2, 7). 5 > 2, 5 < 7. התנאי מתקיים (5 גדול מ-2).
- עבור הצומת 15: יש לו 2 בנים (12, 18). 15 > 12, 15 < 18. התנאי מתקיים (15 גדול מ-12).
הפלט הצפוי יהיה:
10 5 15
דוגמה נוספת:
נתון העץ הבינארי הבא:
20
/
10 30
/ \ /
5 8 25 35
- עבור הצומת 20: יש לו 2 בנים (10, 30). 20 > 10, 20 < 30. התנאי מתקיים (20 גדול מ-10).
- עבור הצומת 10: יש לו 2 בנים (5, 8). 10 > 5, 10 > 8. התנאי מתקיים (10 גדול מ-5 וגם מ-8).
- עבור הצומת 30: יש לו 2 בנים (25, 35). 30 > 25, 30 < 35. התנאי מתקיים (30 גדול מ-25).
הפלט הצפוי יהיה:
20 10 30