חומרי לימוד - מדעי המחשב

‫כ"ט‪/‬שבט‪/‬תשע"ה‬
‫עץ בינארי סריקה ‪ -‬שאלה מבגרות תשס"ט‬
‫ב‪ .‬מהי סיבוכיות זמן הריצה של הפעולה שכתבת?‬
‫• הנח כי כל פעולות הממשק הבסיסיות של עץ בינארי הן ב‪O(1) -‬‬
‫עץ בינארי סריקה ‪ -‬שאלה מבגרות תשס"ט‬
‫‪1‬‬
‫הפתרון – פעולת עזר "האם עָ לֶה"‬
‫פעולת עזר לבדיקה האם עלה‬
‫)‪public static bool IsLeaf(BinTreeNode<int> t‬‬
‫{‬
‫‪//‬מחזירה האם העץ הוא עלה‬
‫‪//‬דרך א ‪ -‬ארוכה‬
‫)‪if (t == null‬‬
‫;‪return false‬‬
‫‪else‬‬
‫)‪if (t.GetLeft() != null || t.GetRight() != null‬‬
‫;‪return false‬‬
‫‪else‬‬
‫;‪return true‬‬
‫‪//‬דרך ב ‪ -‬קצרה‬
‫;)‪return (t != null) && (t.GetLeft() == null) && (t.GetRight() == null‬‬
‫}‬
‫עץ בינארי סריקה ‪ -‬שאלה מבגרות תשס"ט‬
‫‪2‬‬
‫‪1‬‬
‫תשע"ה‬/‫שבט‬/‫כ"ט‬
‫הפתרון – הפעולה העיקרית‬
'‫הפתרון – דרך א‬
public static bool IsRightLeftTree(BinTreeNode<int> t)
{
‫ הנחה העץ אותחל‬,‫מחזירה האם העץ הוא עץ ימין שמאל‬//
if (t == null || IsLeaf(t))
return true;
else
return (IsRightLeftTree(t.GetLeft())
&& (t.GetRight() != null && t.GetLeft() == null)
&& IsRightLeftTree (t.GetRight());
}
3
‫ שאלה מבגרות תשס"ט‬- ‫עץ בינארי סריקה‬
‫הפתרון – הפעולה העיקרית‬
)‫הפתרון – דרך ב' – סריקה תחילית (הביקור בשורש בהתחלה‬
public static bool IsRightLeftTree(BinTreeNode<int> t)
{
‫ הנחה העץ אותחל‬,‫מחזירה האם העץ הוא עץ ימין שמאל‬//
if (t == null || IsLeaf(t)) return true;
else
if (t.GetRight() != null && t.GetLeft() == null)
return false;
else
return (IsRightLeftTree(t.GetLeft())
&& IsRightLeftTree(t.GetRight());
}
4
2
‫ שאלה מבגרות תשס"ט‬- ‫עץ בינארי סריקה‬
‫כ"ט‪/‬שבט‪/‬תשע"ה‬
‫סיבוכיות זמן הריצה של הפעולה‬
‫ב‪ .‬מהי סיבוכיות זמן הריצה של הפעולה – ‪?IsRightLeftTree‬‬
‫תשובה‬
‫סיבוכיות זמן הריצה של הפעולה הוא )‪.O(n‬‬
‫הפעולה ‪ IsRightLeftTree‬היא בסיבוכיות זמן ריצה של )‪ ,O(n‬כיוון שעוברים בדיוק פעם‬
‫אחת באמצעות הרקורסיה‪ ,‬במקרה הגרוע ביותר‪ ,‬על כל אחד מ‪ n-‬הצמתים בעץ וכל הפעולות‬
‫שהשתמשנו בהם הם פעולות ממשק בסיסיות של עץ שהם ב‪ O(1)-‬או פעולת העזר ‪IsLeaf‬‬
‫שגם היא ב‪ O(1)-‬כיוון שהיא בעצמה כוללת רק פעולות בסיסיות של ממשק‪.‬‬
‫עץ בינארי סריקה ‪ -‬שאלה מבגרות תשס"ט‬
‫‪5‬‬
‫‪3‬‬