עבור לתוכן

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

Featured Replies

פורסם
  • מחבר

אני לא מבין איפה יש טעות בקוד הזה :nixweiss:

ואיך אני אמור לבדוק מקרה שבו רק אחד הבנים שווה ל-null אם לא עי כמה משפטי תנאי???

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

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

פורסם
  • מחבר

if(t.GetLeft.getinfo==t.getinfo)
return onepath(t.getleft);

אתה מסכים איתי שתנאי העצירה הוא?

if(t.GetLeft==null && t.GETright==null)
return true;

פורסם

כן, תנאי העצירה שלך סבבה, תשאיר אותו.

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

פורסם
  • מחבר

לא יודע.. :nixweiss:

פורסם

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

אבל מה קורה אם אין בן שמאלי?

אל תהסס להשתמש באופרטור &&.

פורסם
  • מחבר

אולי ככה??

if(t.GEtleft!=null && t.GetLeft.getinfo==t.getinfo)
return onepath(t.getleft);

פורסם

כבר יותר טוב.

אבל עדיין יש לך בעיה - אם הקריאה ל-onepath מחזירה false אתה יוצא מהפונקציה, ולא בודק בכלל את תת העץ הימני.

פורסם
  • מחבר

הוספתי עוד חלק לתנאי. זה טוב? האם אני צריך להוסיף בהתחלה של הפעולה שאם t=null אז הפעולה תחזיר false ?(למקרה שצד אחד NULL והשני לא)


if(t.GEtleft!=null && t.GetLeft.getinfo==t.getinfo || t.getright!=null&&t.getright.getinfo==t.getinfo)
return onepath(t.getleft)||onepath(t.getright));

פורסם

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

פורסם
  • מחבר

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

בסודף לא הבנתי למה מה שעשיתי קודם לא טוב..

פורסם

למה הפונקציה חייבת להסתיים אחרי שקוראים ל-onepath? הרי אם onepath על צד אחד החזירה false, אתה לא רוצה לצאת מהפונקציה, אתה רוצה להמשיך לבדוק גם את הצד האחר.

פורסם
  • מחבר

אני לא יודע איך עושים את זה :nixweiss:

פורסם

if (onepath(...)) {
// do one thing
} else {
// do something else
}

כמו אפשר לשלב את זה עם עוד ביטויים לוגיים באמצעות && ו-|| וכאלה.

פורסם
  • מחבר

if(t.Getleft!==null && t.GetLeft.getinfo==t.getinfo) && onepath(t.getleft)==true)
return onepath(t.getleft);
else if(t.Getright!==null && t.Getright.getinfo==t.getinfo)
return onepath(t.getright);

ארכיון

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

דיונים חדשים