prepd.

שאלת מבחן במבוא למדעי המחשב - אוניברסיטת בר-אילן 2024 - רקורסיה

הגדרה: מסלול בעץ בינארי הינו רצף מחובר של קודקודים. מסלול לא חייב להתחיל בשורש, ולא חייב להסתיים בעלה. מסלול יכול להכיל קודקוד יחיד.

ממשו פונקציה רקורסיבית 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)