You are on page 1of 4

‫בס"ד‬

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

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


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

‫‪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
F 80 False False

)4

public static int sumTree2 (BinNode<Integer> bn1)

if (bn1==null) return 0;

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

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


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

You might also like