(א)נתונה הפעולה Why המקבלת הפניה לשורש עץ בינארי של מספרים שלמים:
```csharp
public static int Why(BinNode<int> t){
if(!t.HasLeft()&&!t.HasRight()) return t.GetValue();
if(t.HasLeft()) return Why(t.GetLeft());
return Why(t.GetRight());
}
```
ציירו עץ בעל שישה צמתים שעבורו הפעולה תחזיר ערך ארבע. כל ערכי הצמתים שונים זה מזה.
```csharp
public static int Why(BinNode<int> t){
if(!t.HasLeft()&&!t.HasRight()) return t.GetValue();
if(t.HasLeft()) return Why(t.GetLeft());
return Why(t.GetRight());
}
```
ציירו עץ בעל שישה צמתים שעבורו הפעולה תחזיר ערך ארבע. כל ערכי הצמתים שונים זה מזה.
(ב)כתבו את הפעולה Why בצורה הלא רקורסיבית.
נתונה הפעולה What המקבלת מספר שלם וחיובי n. הפעולה משתמשת בפעולה Why.
```csharp
public static BinNode<int> What (int n){
if (n == 0)
return null;
else
{
if (n % 2 == 0)
return new BinNode<int>(What(n-1), n, null);
else
{
BinNode<int> tree = What(n-1);
if(tree!=null)
{
int val = Why(tree);
tree.SetRight(new BinNode<int>(n + val));
}
return tree;
}
}
}
```
נתונה הפעולה What המקבלת מספר שלם וחיובי n. הפעולה משתמשת בפעולה Why.
```csharp
public static BinNode<int> What (int n){
if (n == 0)
return null;
else
{
if (n % 2 == 0)
return new BinNode<int>(What(n-1), n, null);
else
{
BinNode<int> tree = What(n-1);
if(tree!=null)
{
int val = Why(tree);
tree.SetRight(new BinNode<int>(n + val));
}
return tree;
}
}
}
```
(ג)עקבו אחרי זימון הפעולה `What(7)` ורשמו מה תחזיר הפעולה.
יש להראות את תוכן העץ בחזרה מכל קריאה רקורסיבית.
יש להראות את תוכן העץ בחזרה מכל קריאה רקורסיבית.
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה בטיחות
שאלו כאן — ותקבלו מענה מוסמך.
רוצים לתרגל אלפי שאלות נוספות?
המשיכו לתרגול מלא עם משוב אישי ←מבחני מה"ט אמיתיים · משוב מיידי · וידאו לכל נושא · מעקב התקדמות