עבור לתוכן

שיטה מייצגת עץ ב- JAVA

Featured Replies

פורסם

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

public static boolean what (Node n)
{
if (n == null)
return true;
if (n.getLeftSon()==null && n.getRightSon()==null)
return true;
if (n.getRightSon()==null)
return (n.getNumber() % n.getLeftSon().getNumber() == 0)
&&
what (n.getLeftSon());
if (n.getLeftSon()==null)
return (n.getNumber() % n.getRightSon().getNumber() == 0)
&&
what (n.getRightSon());

return (n.getNumber() % n.getLeftSon().getNumber() == 0)
&& (n.getNumber() % n.getRightSon().getNumber() == 0)
&& what (n.getLeftSon())
&& what (n.getLeftSon());
}

וה- 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; }

public void setNumber(int number) {_number = number; }
public void setLeftSon(Node node) {_leftSon = node; }
public void setRightSon(Node node) {_rightSon = node; }
}

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

אני יודע שזה לא ממש משהו הגיוני מבחינת חשיבות מה שהיא עושה, אבל ההשערה שלי היא שאולי היא מוצאת כמה עלים יש להם

את הערך 0 ורושמת את מספר העלים הללו... :silly: מישהו יכול לעזור לי לראות מה היא עושה ?

תודה !

פורסם

שים לב לפעולה % שיש שם... נראה לי שהתעלמת ממנה.

פורסם
  • מחבר

איזה שטויות אני מדבר :o... היא הרי מחזירה רק true או false... :kopfpatsch:

לפי השורות:

if (n.getLeftSon() == null && n.getRightSon() ==null)
return true;

אני למד כי כאשר הוא מזהה עלה בוודאות הוא יחזיר true אבל... לא ככ הבנתי מה הוא עושה במקרה של שורש...

פורסם

אתה יודע מה המשמעות של הביטוי הזה?

n.getNumber() % n.getLeftSon().getNumber() == 0

פורסם
  • מחבר

אומר: קח את המספר הנוכחי וחלקו בבן השמאלי, ובדוק האם התוצאה שווה ל-0.

פורסם
  • מחבר

ברור ברור :kopfpatsch: התכוונתי לשארית.... :smile1:

אומר: קח את המספר הנוכחי (האב) ובדוק האם הוא מתחלק בבן השמאלי ללא שארית.

אבל מה התוכנית כולה עושה ?

פורסם

עכשיו תאמר לי מה זה עושה:

(n.getNumber() % n.getLeftSon().getNumber() == 0) && what (n.getLeftSon())

פורסם
  • מחבר

אומר: קח את המספר הנוכחי (האב) ובדוק האם הוא מתחלק בבן השמאלי ללא שארית, וגם בבן הימני ללא שארית ? ::)

פורסם

תקרא שוב את השורה. איפה ראית התייחסות לבן הימני?

פורסם

אולי כדאי שתנסה לצייר כמה עצים שונים שיחזירו לך true בסיום הפעולה, ואז תראה מה מיוחד בערכים של העצים...

פורסם
  • מחבר

צודק לא יודע איפה ראיתי RightSon...

רגע ... יכול להיות שהתוכנית מחזירה true אם כל אב יכול להתחלק בכל אחד מהבנים שלו, ו- false אם אפילו אחד מהאבות

אינו יכול להתחלק בשני בניו ?

פורסם

בדיוק :)

(אגב, נראה לי שיש שגיאה בסוף של הפונקציה - יש שם פעמיים getLeftSon במקום פעם אחת getLeftSon ופעם אחת getRightSon)

פורסם
  • מחבר

אתה צודק באמת יש שגיאה...

עכשיו.. אם אני לוקח נניח את העץ המצ"ב אז אני אקבל בעצם false נכון ? כי אין לי אבות מושלמים.

אגב אם יש לי אב עם בן אחד רק (לא משנה ימני \ שמאלי) אבל הוא יכול להתחלק בו ללא שארית אז אני אקבל true עדיין או

שהוא ייתן false בגלל שאין לי 2 בנים?

[attachment deleted by admin]

ארכיון

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

דיונים חדשים