עבור לתוכן

שאלה בעץ בינארי

Featured Replies

פורסם

יש לי שאלה שפתרתי והיות ואני די מתקשה בסוג הזה של השאלות הייתי רוצה להתייעץ.

נניח שהמחלקה Node שלהלן מממשת עץ בינרי:

public class Node
{
private int _number;
private Node _leftSon, _rightSon;
public Node (int number)
{
_number = number;
_leftSon = null;
_rightSon = null;
}
public int getNumber()
{return _number; }
public Node getLeftSon()
{return _leftSon; }
public Node getRightSon()
{return _rightSon; }
}

נתונות שתי השיטות הבאות:

f המקבלת כפרמטרים שני מספרים שלמים

ו-what המקבלת כפרמטר שורש של עץ בינרי (מטיפוס Node):

public static int f (int a, int b)
{
return (a>b) ? a:b;
}
public static int what (Node root)
{
if (root == null)
return -1;
return (f (what (root.getLeftSon()),
what (root.getRightSon())) +1);
}

מה תחזיר השיטה what היא תקבל את השורש של העץ root הבא?

123.png

לי יצא 4 אבל אין לי מושג אם זה נכון.

פורסם
  • מחבר

אין לי פה סביבה...

פורסם

שונא רקורסיות יחיה....

- - - תגובה אוחדה: - - -

אבל נראה לי הוא יחזיר 3...

פורסם

לא התעמקתי יותר מידי אבל אהי חושב שהוא מחזיר 2 , הוא סופר את הבנים הימניים ..

או שהוא סופר את אורך המסלול שנגמר בעלה ימני . (נראה לי יותר ניחוש א)

- - - תגובה אוחדה: - - -

*אהי = אני .

פורסם

לא מדויק אבל קרוב :-)

פורסם

אי , הוא מחזיר 1 .

מחזיר את מספר הענפים שנגמרים בעלה ימני ?

פורסם
  • מחבר

למישהו אולי יש class של זה עלמנת שאני יוכל להריץ ולבדוק ?

קצת לא מובן לי כל הקונספט של זה (איך אני יוצר בן ימני או שמאלי, מדפיס וכו') לכן אני לא יודע איך לכתוב אחד כזה ויש לי עוד מלא תרגילים דומים.

פורסם

הוא יחזיר 3.

public static void main(String []args){
Node n = new Node(32);
n.setRight(4);
n.setLeft(12);
n.right().setLeft(5);
n.right().left().setLeft(1);
n.left().setRight(3);
System.out.println(Node.what(n));
}

שים לב שהוספתי מתודות מסוג setter וקיצרתי את getLeftSon ל-left (כנ"ל לגבי right)

פורסם

איך זה ?

פורסם

באמת שזה לא כזה מסובך... שימו לב שלא התבלבלתם בחישוב איפה נמצאים הסוגריים (האלגוריתם מתייחס אותו דבר לצד ימין ושמאל).

פורסם
  • מחבר

אז כמה זה אמור לצאת ?

פורסם
  • מחבר

יש משהו שאני לא ממש מבין ובגלל זה לא כתבתי את הקוד.

איך אני יוצר מחלקה של עץ בינארי ? ז"א איך אני מכניס איבר לצד הימני או שמאלי ?

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים