You are on page 1of 3

new 1 Sunday, May 12, 2019 9:23 PM

///
/// ‫עץ בינארי‬
///
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ זהה בדיוק בצמתיו ובמיקומים שלהם לעץ שהתקבל‬,‫ הפעולה מחזירה עץ חדש‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static BinNode<int> CloneTree(BinNode<int> bt)
{
if (bt == null)
return null;
BinNode<int> left = CloneTree(bt.GetLeft());
BinNode<int> right = CloneTree(bt.GetRight());
return new BinNode<int>(left, bt.GetValue(), right); //‫להחליף ימין ושמאל לקבלת‬
‫עץ מראה‬
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים ומספר שלם‬:‫טענת כניסה‬
// ‫ אחרת מחזירה "שקר‬,‫ הפעולה מחזירה "אמת" אם המספר שהתקבל נמצא בעץ‬:‫"טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static bool IsExistTree(BinNode<int> bt, int n)
{
if (bt == null)
return false;
return (bt.GetValue() == n || IsExistTree(bt.GetLeft(), n) ||
IsExistTree(bt.GetRight(), n));
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ הפעולה מחזירה את סכום ערכי כל הצמתים בעץ‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static int SumTree(BinNode<int> bt)
{
if (bt == null)
return 0;
return bt.GetValue() + SumTree(bt.GetLeft()) + SumTree(bt.GetRight());
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ אחרת מחזירה "שקר‬,‫ הפעולה מחזירה "אמת" אם העץ הוא עלה‬:‫"טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(1)
public static bool IsLeaf(BinNode<int> bt)
{
return (bt.GetLeft() == null && bt.GetRight() == null);
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ ימין‬,‫ שמאל‬,‫ שורש‬- ‫ הפעולה מדפיסה את ערכי הצמתים בעץ לפי סדר תחילי‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static void PrintPreOrder(BinNode<int> bt)
{
if (bt != null)
{
Console.WriteLine(bt.GetValue());
PrintPreOrder(bt.GetLeft());
PrintPreOrder(bt.GetRight());
}
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ ימין‬,‫ שורש‬,‫ שמאל‬- ‫ הפעולה מדפיסה את ערכי הצמתים בעץ לפי סדר תוכי‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static void PrintInOrder(BinNode<int> bt)
{
if (bt != null)
{
PrintInOrder(bt.GetLeft());
Console.WriteLine(bt.GetValue());
PrintInOrder(bt.GetRight());
}
}

-1-
new 1 Sunday, May 12, 2019 9:23 PM
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ שורש‬,‫ ימין‬,‫ שמאל‬- ‫ הפעולה מדפיסה את ערכי הצמתים בעץ לפי סדר סופי‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static void PrintPostOrder(BinNode<int> bt)
{
if (bt != null)
{
PrintPostOrder(bt.GetLeft());
PrintPostOrder(bt.GetRight());
Console.WriteLine(bt.GetValue());
}
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ כל צמתי העץ ברמה‬- ‫ הפעולה מדפיסה את ערכי הצמתים בעץ לפי הרמה שלהם‬:‫טענת יציאה‬
‫כלשהי יודפסו אחד אחרי השני‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static void PrintByLevels(BinNode<int> bt)
{
Queue<BinNode<int>> q = new Queue<BinNode<int>>();
q.Insert(bt);
while (!q.IsEmpty())
{
BinNode<int> current = q.Remove();
Console.WriteLine(current.GetValue());
if (current.GetLeft() != null)
q.Insert(current.GetLeft());
if (current.GetRight() != null)
q.Insert(current.GetRight());
}
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ הפעולה מחזירה את מספר הצמתים בעץ‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static int CountNodes(BinNode<int> bt)
{
if (bt == null)
return 0;
return 1 + CountNodes(bt.GetLeft()) + CountNodes(bt.GetRight());
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ הפעולה מחזירה את מספר העלים בעץ‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static int CountLeaves(BinNode<int> bt)
{
if (bt == null)
return 0;
if (IsLeaf(bt)) //!
return 1;
return CountLeaves(bt.GetLeft()) + CountLeaves(bt.GetRight());
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ הפעולה מחזירה את גובה העץ‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static int Height(BinNode<int> bt)
{
if (bt == null)
return -1;
return 1 + Math.Max(Height(bt.GetLeft()), Height(bt.GetRight()));
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ הפעולה מחזירה את הערך הגבוה ביותר בעץ‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static int MaxValue(BinNode<int> bt)
{
if (IsLeaf(bt)) //!
return bt.GetValue();
int maxLeft = MaxValue(bt.GetLeft());
int maxRight = MaxValue(bt.GetRight());
return Math.Max(bt.GetValue(), Math.Max(maxLeft, maxRight));
}

-2-
new 1 Sunday, May 12, 2019 9:23 PM

// ‫ הפעולה מקבלת עץ בינארי "בן" ואת הצומת העליון ביותר בעץ כלשהו בו נמצא‬:‫טענת כניסה‬
"‫ "שורש‬- "‫"בן‬
// ‫ יוחזר‬- "‫ אם אביו לא נמצא בעץ "שורש‬."‫ הפעולה מחזירה את האב של העץ "בן‬:‫טענת יציאה‬
‫ערך ריק‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static BinNode<int> GetFather(BinNode<int> source, BinNode<int> son)
{
if (source == null)
return null;
if (source.GetLeft() == son || source.GetRight() == son)
return source;
BinNode<int> left = GetFather(source.GetLeft(), son);
if (left != null)
return left;
return GetFather(source.GetRight(), son);
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים ומספר שלם‬:‫טענת כניסה‬
// ‫ הפעולה מחזירה את מספר הצמתים בהם מופיע הערך שהתקבל‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static int HowManyTree(BinNode<int> bt, int n)
{
if (bt == null)
return 0;
if (bt.GetValue() == n)
return 1 + HowManyTree(bt.GetLeft(), n) + HowManyTree(bt.GetRight(), n);
return HowManyTree(bt.GetLeft(), n) + HowManyTree(bt.GetRight(), n);
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים ומספר שלם המייצג רמה בעץ‬:‫טענת כניסה‬
// ‫ הפעולה מחזירה את מספר הצמתים ברמה שהתקבלה‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static int NodesInLevel(BinNode<int> bt, int level)
{
if (bt == null)
return 0;
if (level == 0)
return 1;
return NodesInLevel(bt.GetLeft(), level - 1) + NodesInLevel(bt.GetRight(), level
- 1);
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים‬:‫טענת כניסה‬
// ‫ אחרת מחזירה "שקר‬,‫ הפעולה מחזירה "אמת" אם העץ הוא עץ חיפוש בינארי‬:‫"טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(n)
public static bool IsBST(BinNode<int> bt)
{
if (bt == null)
return true;
if (bt.GetLeft() != null && bt.GetLeft().GetValue() >= bt.GetValue())
return false;
if (bt.GetRight() != null && bt.GetRight().GetValue() < bt.GetValue())
return false;
return IsBST(bt.GetLeft()) && IsBST(bt.GetRight());
}
// ‫ הפעולה מקבלת עץ בינארי של מספרים שלמים ומספר שלם‬:‫טענת כניסה‬
// ‫ הפעולה מוסיפה את המספר שהתקבל לעץ החיפוש הבינארי‬:‫טענת יציאה‬
// ‫סיבוכיות זמן ריצה‬: O(log(n))
public static void AddToBST(BinNode<int> bt, int n)
{
if (bt.GetLeft() == null && n < bt.GetValue())
bt.SetLeft(new BinNode<int>(n));
else if (bt.GetRight() == null && n >= bt.GetValue())
bt.SetRight(new BinNode<int>(n));
else if (n < bt.GetValue())
AddToBST(bt.GetLeft(), n);
else AddToBST(bt.GetRight(), n);
}
}
}

-3-

You might also like