עץ בינרי כללי (לא בהכרח עץ חיפוש ממוין) מיוצג בעזרת המחלקה BinNode<T> (value, left, right, get/set). רשימה מקושרת חד-כיוונית מיוצגת בעזרת המחלקה Node<T> (value, next, get/set) — שתיהן מוגדרות למטה. סעיף א עוסק בבדיקת קיום ערך בעץ בינרי כלשהו; סעיף ב עוסק בהשוואת שני עצים בינריים לא ריקים t1 ו-t2 ובבניית רשימה חדשה מהערכים שקיימים ב-t1 ואינם קיימים ב-t2, תוך שימוש בפעולה מסעיף א; סעיף ג עוסק בסיבוכיות הפעולה מסעיף ב. הפעולה הנתונה check(t1,t2) (הבנויה כבר עבורכם) נעזרת בפעולה נוספת בעלת שלושה פרמטרים, שאותה יש לממש.
עץ בינרי כללי (לא בהכרח עץ חיפוש ממוין) מיוצג בעזרת המחלקה BinNode<T> (value, left, right, get/set). רשימה מקושרת חד-כיוונית מיוצגת בעזרת המחלקה Node<T> (value, next, get/set) — שתיהן מוגדרות למטה. סעיף א עוסק בבדיקת קיום ערך בעץ בינרי כלשהו; סעיף ב עוסק בהשוואת שני עצים בינריים לא ריקים t1 ו-t2 ובבניית רשימה חדשה מהערכים שקיימים ב-t1 ואינם קיימים ב-t2, תוך שימוש בפעולה מסעיף א; סעיף ג עוסק בסיבוכיות הפעולה מסעיף ב. הפעולה הנתונה check(t1,t2) (הבנויה כבר עבורכם) נעזרת בפעולה נוספת בעלת שלושה פרמטרים, שאותה יש לממש.
public class BinNode<T> {
private T value;
private BinNode<T> left;
private BinNode<T> right;
public BinNode(T value) { this.value = value; this.left = null; this.right = null; }
public T getValue() { return value; }
public void setValue(T value) { this.value = value; }
public BinNode<T> getLeft() { return left; }
public void setLeft(BinNode<T> left) { this.left = left; }
public BinNode<T> getRight() { return right; }
public void setRight(BinNode<T> right) { this.right = right; }
}
public class Node<T> {
private T value;
private Node<T> next;
public Node(T value) { this.value = value; this.next = null; }
public T getValue() { return value; }
public void setValue(T value) { this.value = value; }
public Node<T> getNext() { return next; }
public void setNext(Node<T> next) { this.next = next; }
}
// הפעולה check(t1,t2) הבאה נתונה (אינה חלק מהמימוש):
public static Node<Integer> check(BinNode<Integer> t1, BinNode<Integer> t2) {
Node<Integer> first = new Node<Integer>(-1);
first = check(t1, t2, first);
return first.getNext();
}
ממש פעולה חיצונית exist ב-Java (או Exist ב-C#). הפעולה מקבלת עץ בינרי t וערך x, ומחזירה true אם x קיים בעץ, אחרת false.
public static boolean exist (BinNode<Integer> t, int x)
לפניך הפעולה check(t1, t2) (הפעולה מקבלת שני עצים בינריים לא ריקים t1 ו-t2, ומחזירה רשימה חדשה (Node<Integer>) המכילה את כל המספרים הנמצאים בעץ t1 ואינם נמצאים בעץ t2). הפעולה נעזרת בפעולה נוספת בעלת שלושה פרמטרים. ממש את הפעולה: public static Node<Integer> check(BinNode<Integer> t1, BinNode<Integer> t2, Node<Integer> list) (ב-C#: Check(BinNode<int> t1, BinNode<int> t2, Node<int> list)). אתה יכול להשתמש בפעולה שמימשת בסעיף א.
public static Node<Integer> check (BinNode<Integer> t1, BinNode<Integer> t2, Node<Integer> list)
מהי סיבוכיות זמן הריצה של הפעולה שמימשת בסעיף ב? נמק את תשובתך.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.