עבור לתוכן

C#| פעולה חיצונית לעץ בינארי

Featured Replies

פורסם

שלום לכולם!

אני צריך עזרה בתרגיל מבגרות(רמה של 5 יחל)

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

נקודות הנחה:העץ התקבל אינו ריק,והערכים שלו הם רק 1 או 2. או לא הבנתם את השאלה אפשר לקרוא אותה כאן השאלה בעמוד 5.

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

יש לי בעיה קטנה בפעולה שכתבתי,מספיק שרק הצומת השמאלית הראשונה של העץ תהיה שווה לשורש,והפעולה לא תבדוק את כל התת עץ הימני...

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

תודה מראש! :xyxthumbs:

[attachment deleted by admin]

  • תגובות 32
  • צפיות 4.3k
  • נוצר
  • תגובה אחרונה
פורסם

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

חוץ מזה, לא טיפלת במקרה שלצומת יש רק תת עץ אחד (כלומר בן אחד הוא null והאחר לא).

פורסם
  • מחבר

אם אני יוסיף אני התנאי הראשון את התנאי הבא זה יעבוד?

if(a==t.GetLeft().Get.info() && a== t.GetRight.Getinfo()) f

return onepath(t.Getleft) +onepath(t.GetRight) a

(אם אני לא טועה)צד אחד יחזיר שקר והאחר יחזיר אמת, אז יווצר המצב הבא return false + true אז מה זה יחזיר בסופו של דבר, שקר או אמת??

פורסם

כמעט

רמז - &&

וב-RETURN אתה לא צריך להסתבך עם פלוס

תחזיר פשוט אמת

בכל מקרה אתה צריך גם ELSE

אחרי שתפתור את ה-IF הזה

תחשוב איך אפשר פשוט לרשום את כל ה-IF (עם ה-THEN וה ELSE שלו) בשורה אחת

פורסם

מה זה +? נראה לי שהתכוונת ל-||, יענו "או".

תנסח לעצמך בראש מה התנאי שצריך להתקיים, לדוגמה: "צריך להתקיים __ או __ וגם __ או __" (זו סתם דוגמה, זה לא בהכרח המבנה של התנאי שצריך להיות לך)

פורסם
  • מחבר

nirt לא ככ הבנתי למה אתה מתכוון...

שניצל אתה צודק, התכוונתי ל-||. אז אם יש לי return false||true מה יוחזר??

ומה יקרה אם אני ישנה את הסימן הזה ל-&& ,מה יוחזר אז?

פורסם

&& זה "וגם", דהיינו "אמת אם שני הפסוקים הם אמת", ו-|| זה "או", דהיינו "אמת אם לפחות אחד מהפסוקים הוא אמת".

פורסם
  • מחבר

אוקיי,

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

תודה לשניכם על העזרה!!

פורסם
  • מחבר

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

if(a==t.GetLeft().Get.info() && a== t.GetRight.Getinfo()) f

return onepath(t.Getleft) || onepath(t.GetRight) a

פורסם

מה ההגיון בבדיקה הזו?

a==t.GetLeft().Get.info() && a== t.GetRight.Getinfo()

בכל מקרה, את הקוד שים בטג קוד שיהיה יותר ברור.

פורסם
  • מחבר

^^שיניתי את מה שאחרי התנאי הראשון לקוד הבא:


if(a!=t.getleft.getinfo && a!=t.getright.getinfo)
return false;
else return onepath(t.getleft) || onepath(t.getright)

פורסם

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

וכאמור, אתה לא בודק את המקרה שאחד הבנים הוא null והאחר לא.

פורסם
  • מחבר

כתבתי את כל הקוד ותיקנתי את הטעויות שהבנתי...


public static bool onepath(Bintree<int> t)
{
int a=t.getinfo;
if(t.Getright()==null && t.Getleft==null;
return true;
if(t.getleft!=null && t.getright!=null)
{
if(t.getright.getinfo!=a&&t.getleft.getinfo!=a)
return false;
else if(t.getright.getinfo==a)
return onepath(t.getright;
else
return onepath(t.getleft);
}
else if(t.getright!=null)
{
if(t.getleft.getinfo==a)
return onepath(t.getleft)
else return false;
}
else if (t.getright.getinfo==a)
return onepath(t.getright)
else return false;
{

פורסם

הקוד שלך מסובך להחריד. אתה בודק את אותם דברים שוב ושוב, ועדיין יש לך את הבעיה שהייתה לך בהתחלה.

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

אני אומר שוב:

תנסח את התנאי שלך בצורה ברורה בעברית ואז תתרגם אותו לקוד.

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

ארכיון

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

דיונים חדשים