שאלת מבחן במבוא למדעי המחשב - אוניברסיטת בר-אילן 2024 - רקורסיה
הגדרה: מסלול בעץ בינארי הינו רצף מחובר של קודקודים. מסלול לא חייב להתחיל בשורש, ולא חייב להסתיים בעלה. מסלול יכול להכיל קודקוד יחיד.
ממשו פונקציה רקורסיבית findAllPaths אשר מקבלת עץ בינארי T ומספר שלם x ומחזירה את מספר המסלולים ב-T אשר סכום ערכי הקודקודים במסלולים האילו הינו x.
דוגמה: בהנתן העץ הבא ו-:
ישנם ארבעה מסלולים בעץ אשר סכום הערכים של הקודקודים בהם הינו 7 (המסלולים מסומנים בחצים, ומסלול אחד שמכיל קודקוד יחיד עם ערך 7 מסומן בעיגול).
שימו לב: פתרון שאינו רקורסיבי לא יזכה אותכם בניקוד.
ממשו פונקציה רקורסיבית findAllPaths אשר מקבלת עץ בינארי T ומספר שלם x ומחזירה את מספר המסלולים ב-T אשר סכום ערכי הקודקודים במסלולים האילו הינו x.
דוגמה: בהנתן העץ הבא ו-:
1
/ \
2 -2
/ \ / \
-1 5 8 4
| |
7 5
ישנם ארבעה מסלולים בעץ אשר סכום הערכים של הקודקודים בהם הינו 7 (המסלולים מסומנים בחצים, ומסלול אחד שמכיל קודקוד יחיד עם ערך 7 מסומן בעיגול).
שימו לב: פתרון שאינו רקורסיבי לא יזכה אותכם בניקוד.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד ב2024סמסטר ב
★★★★★
רקורסיהעצים בינאריים
פתרו בשני שלבים: (1) פונקציית עזר שסופרת מסלולים המתחילים מצומת נתון ויורדים למטה עם סכום x. (2) הפונקציה הראשית קוראת לעזר מכל צומת בעץ (כך שכל צומת יכול להיות תחילת מסלול).
הסבר: שתי פונקציות רקורסיביות:
1. countFromNode(node, remaining): סופרת מסלולים שמתחילים בדיוק מ-node ויורדים למטה. אם
node->val == remaining, מצאנו מסלול. ממשיכים רקורסיבית שמאלה וימינה עם remaining - node->val.2. findAllPaths(T, x): לכל צומת בעץ, קוראת ל-countFromNode (כדי לבדוק מסלולים שמתחילים ממנו), ואז קוראת רקורסיבית על תת-העצים.
אימות על הדוגמה (): 4 מסלולים:
-
-
- (קודקוד בודד)
- (... or another combination)