מוגדרת "רשימה דו-כיוונית" כאוסף סדור של חוליות BinNode<Integer> המקושרות כך שלכל זוג חוליות p1,p2: אם p1.getRight()==p2 אז p2.getLeft()==p1 (יש לפחות שתי חוליות). כלומר כל חוליה — חוץ מהחוליה שבקצה הימני והחוליה שבקצה השמאלי — מצביעה על החוליה שלפניה ועל החוליה שלאחריה. בדוגמה שבשאלון: הרשימה 13-10-27-11-8 (null בקצה שמאל, null בקצה ימין), ומשתנה pos מצביע על החוליה עם הערך 11.
מוגדרת "רשימה דו-כיוונית" כאוסף סדור של חוליות BinNode<Integer> המקושרות כך שלכל זוג חוליות p1,p2: אם p1.getRight()==p2 אז p2.getLeft()==p1 (יש לפחות שתי חוליות). כלומר כל חוליה — חוץ מהחוליה שבקצה הימני והחוליה שבקצה השמאלי — מצביעה על החוליה שלפניה ועל החוליה שלאחריה. בדוגמה שבשאלון: הרשימה 13-10-27-11-8 (null בקצה שמאל, null בקצה ימין), ומשתנה pos מצביע על החוליה עם הערך 11.
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; }
}
// "רשימה דו-כיוונית": לכל זוג חוליות p1,p2 — אם p1.GetRight()==p2 אז p2.GetLeft()==p1.
הרשימה הדו-כיוונית שבדוגמה, pos מצביע על החוליה עם הערך 11
null <- [13] <-> [10] <-> [27] <-> [11] <-> [8] -> null
^pos
לפניך שלד הפעולה firstLeft (ב-C#: FirstLeft) המקבלת pos שונה מ-null מטיפוס BinNode<Integer> המצביע על חוליה כלשהי ברשימה דו-כיוונית, ומחזירה את החוליה השמאלית ביותר ברשימה. העתק את השלד למחברתך והשלם אותו כך שהפעולה תבצע את הנדרש.
public static BinNode<int> FirstLeft(BinNode<int> pos)
עקוב אחר ביצוע הפעולה what(pos) בעבור המשתנה pos והרשימה הדו-כיוונית שבדוגמה שהוצגה בתחילת השאלה. במעקב הראה את ערכי המשתנים pos, left, right, sum.
קבע אם אפשר או אי אפשר להחליף את 3 השורות האחרונות שבפעולה בשורה המקופלת במסגרת (return left.getValue()+right.getValue()==sum;). נמק את קביעתך.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.