You are on page 1of 5

‫בס"ד‬

‫נתון העץ הבא‪:‬‬

‫עליכם לבצע טבלאות מעקב לפונקציות שונות שרצות על העץ הזה‪.‬‬


‫כל קריאה לפונקציה כוללת את שם הפונקציה‪ ,‬ואת הרפרנס לצומת עליה הפונקציה מתבצעת‪ .‬כדי להקל על‬
‫הרישום של המעקב‪ ,‬לכל צומת בעץ ניתן מספר שהוא ייצג את הרפרנס אליה בטבלת המעקב‪.‬‬

‫‪A:0007‬‬

‫‪B:0005‬‬

‫‪C:0050‬‬

‫‪D:0003‬‬

‫‪E:0045‬‬

‫‪F:0080‬‬

‫‪G:0001‬‬

‫‪H:0004‬‬

‫‪I:0030‬‬

‫עקבו בטבלת מעקב אחרי הקודים הבאים‪.‬‬


‫בכל טבלה יש להזין קריאות מלאות לפונקציות‪ ,‬צומת נוכחית‪ ,‬מספר סידורי של קריאות עתידיות‪ .‬תנאים‪,‬‬
‫הדפסות וערכים מוחזרים‪ ,‬במקרה שמוחזרת קריאה לפונקציה‪ ,‬או ערך שמתקבל כתוצאה מקריאה לפונקציה‬
‫(תרגילים ‪ )3-4‬יש לכתוב את הקריאות לפונקציה עם = (כסימן לכך שאיננו יודעים עדיין מה יחזור )‬
‫וכשמגיעה תוצאה להוסיף את התוצאה‪:‬‬
)1

public static void printTree(BinNode<T> bn1)

1.System.out.print(bn1.getValue());

2.if (bn1.hasLeft()) printTree(bn1.getLeft());

3.if (bn1.hasRight()) printTree(bn1.getRight());

‫צומת נוכחית‬ ‫הדפסה‬ )(Bn1.hasLeft ‫קריאה‬ )(Bn2.hasRight ‫קריאה‬


‫לפונקציה‬ ‫לפונקציה‬
A 7 True printTree(B) True printTree(c)
B 5 True printTree(D) False
D 3 True printTree(G) True printTree(H)
G 1 False False
H 4 False False
C 50 True printTree(E) True printTree(F)
E 45 True printTree(I) False
I 30 False False
F 80 False False

)2

public static void printTree(BinNode<T> bn1)

2.if (bn1.hasLeft()) printTree(bn1.getLeft());

1.System.out.print(bn1.getValue()(;

3.if (bn1.hasRight()) printTree(bn1.getRight());

‫צומת נוכחית‬ )(Bn1.hasLeft ‫קריאה לפונקציה‬ (Bn2.hasRight ‫קריאה לפונקציה‬ ‫הדפסה‬


)
A True printTree(B) True printTree(C) 7
B True printTree(D) False 5
D True printTree(G) True printTree(H) 3
G False False 1
H False False 4
C True printTree(E) True printTree(F) 50
E True printTree(I) False 45
I False False 30
F False False 80

)3

public static int sumTree (BinNode<Integer> bn1)

1.int sum = bn1.getValue();

2.if (bn1.hasLeft()) sum += sumTree(bn1.getLeft());

3.if (bn1.hasRight()) sum+=sumTree(bn1.getRight());

return sum

‫צומת‬ su (Bn1.hasLeft ‫קריאה‬ su (Bn2.hasRight ‫קריאה‬ Su Retur


‫נוכחי‬ m ) ‫לפונקציה‬ m ) ‫לפונקציה‬ m n
‫ת‬

A 7 True sumTree(B) 20 True sumTree(C) 225 225


B 5 True sumTree(D) 13 False 13 13
D 3 True sumTree(G) 4 True sumTree(H) 8 8
G 1 False 1 False 1 1
H 4 False 4 False 4 4
C 50 True printTree(E) 125 True printTree(F) 205 205
E 45 True printTree(I) 75 False 75 75
I 30 False False 30
F 80 False False 80

)4

public static int sumTree2 (BinNode<Integer> bn1)

if (bn1==null) return 0;

return sumTree2(bn1.getLeft()) + sumTree2(bn1.getRight()) + bn1.getValue();

‫צומת נוכחית‬ Bn1 == null ‫קריאה‬ ‫קריאה‬ return


‫לפונקציה‬ ‫לפונקציה‬
‫‪A‬‬ ‫‪false‬‬ ‫)‪sumTree2(B‬‬ ‫)‪sumTree2(C‬‬ ‫‪225‬‬
‫‪B‬‬ ‫‪false‬‬ ‫)‪sumTree2(D‬‬ ‫)‪sumTree2(null‬‬ ‫‪13‬‬
‫‪D‬‬ ‫‪false‬‬ ‫)‪sumTree2(G‬‬ ‫)‪sumTree2(H‬‬ ‫‪8‬‬
‫‪G‬‬ ‫‪false‬‬ ‫)‪sumTree2(null‬‬ ‫)‪sumTree2(null‬‬ ‫‪1‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪H‬‬ ‫‪false‬‬ ‫)‪sumTree2(null) sumTree2(null‬‬ ‫‪4‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪C‬‬ ‫‪false‬‬ ‫)‪sumTree2(E‬‬ ‫)‪sumTree2(F‬‬ ‫‪205‬‬
‫‪E‬‬ ‫‪false‬‬ ‫)‪sumTree2(I‬‬ ‫)‪sumTree2(null‬‬ ‫‪75‬‬
‫‪I‬‬ ‫‪false‬‬ ‫)‪sumTree2(null) sumTree2(null‬‬ ‫‪30‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪F‬‬ ‫‪false‬‬ ‫)‪sumTree2(null) sumTree2(null‬‬ ‫‪80‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬
‫‪null‬‬ ‫‪true‬‬ ‫‪0‬‬

‫בנו טבלת מעקב לקוד זה בעצמכם!‬

‫מטלה ב ‪ –VsCode‬כתבו קוד רקורסיבי שמקבל עץ בינארי של שלמים ומחשב את ממוצע הערך של כל צומת‪.‬‬
‫(אם יש ‪ 10‬צמתים‪ ,‬שסכומם ‪ 70‬יוחזר הערך ‪.)7‬‬
‫כתבו פונקציה רקורסיבית שמקבלת עץ בינארי ומוחק את כל הצמתים שערכם ‪0‬‬
‫כתבו פונקציה רקורסיבית שמקבלת עץ בינארי ומספר שלם ומוחקת את כל הצמתים שערכם שווה למספר‬
‫שהתקבל‪.‬‬
‫כתבו פונקציה שמדפיסה את כל האיברים הזוגיים שבעץ הבינארי לפי רמות‬

‫כתבו פונקציה שמקבלת שם‪ String‬ומחזירה את הרפרנס לצומת שהערך שלה שווה לשם‪ .‬הניחו שהשם נמצא‬
‫ברמה יחסית גבוהה בצד שמאל‪.‬‬
‫פתרו את שאלת הבגרות מהמצגת‪...‬‬
‫כתבו פונקציה שמקבלת מערך של שלמים‪ ,‬ומוסיפה אותם כילדים לעלים שברמה התחתונה לפי הסדר‪( .‬ילד‬
‫שמאלי לעלה הכי שמאלי‪ ,‬ילד ימני לעלה הכי שמאלי‪ ,‬ילד שמאלי לעלה השני משמאל‪ ,‬ילד ימני לעלה השני‬
‫משמאל‪ ,‬ילד שמאלי לעלה השלישי משמאל‪)...‬‬

You might also like