מבני נתונים ואלגוריתמים - מחברת קורס/מבני נתונים/עצי חיפוש בינריים/תרגילים/יחס צאצא-הורה/תשובה

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

משפט כללי[עריכה]

כדי לפתור את התשובה, נוכיח ראשית את המשפט הפשוט הבא:



משפט:

בעץ חיפוש בינרי בעל מפתחות שונים זה מזה, נניח שצומת מחזיק מפתח כלשהו. אז:

  1. הצאצאים השמאליים של מכילים כולם מפתחות קטנים ל.
  2. יש עוד צמתים עם מפתחות קטנים מ מעבר לכך אם ורק אם הוא צאצא ימני (לאו דווקא ישיר) של צומת כלשהו.


להלן דוגמה למה שהמשפט אומר.



דוגמה:

בתרשים הבא, אינו צאצא ימני של אף צומת. צמתי המפתחות הקטנים ממנו (הצבועים באפור), כולם בתת העץ הימני שלו.

מיקום צמתים בעלי מפתחות קטנים מצומת נתון - לא צאצא ימני.
מיקום צמתים בעלי מפתחות קטנים מצומת נתון - לא צאצא ימני.

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

מיקום צמתים בעלי מפתחות קטנים מצומת נתון - צאצא ימני.
מיקום צמתים בעלי מפתחות קטנים מצומת נתון - צאצא ימני.


עכשיו תורכם:

השתמש בתכונת הBST כדי להוכיח את המשפט.

הקשר ללא מידע נוסף[עריכה]

מהמשפט הכללי ברור שאי אפשר לקבוע האם הצומת של הוא צאצא של הצומת של . ייתכן שהצומת של הוא צאצא שמאלי של הצומת של , אך אם הצומת של הוא צאצא ימני של צומת כלשהו, ייתכן שהצומת של הוא צאצא שמאלי של אותו הצומת.

הקשר עם מידע נוסף[עריכה]

ראשית, ברור שכל אחד בנפרד מסדרו של צומת במעבר in-order,‏ post-order,‏ או מספר צאצאיו, אינו מספיק כדי לקבוע יחס צאצא-אב.

נתבונן שוב במקרה בו צומת הוא צאצא ימני של צומת .

מיקום צמתים בעלי מפתחות קטנים מצומת נתון - צאצא ימני.
מיקום צמתים בעלי מפתחות קטנים מצומת נתון - צאצא ימני.
  1. אם , אז יודפס לפני במעבר in-order בכל מקרה. אבל אם , אז יכול להיות צאצא שמאלי של , או צאצא שמאלי של הורה של (לדוגמה ).
  2. באופן דומה, אם , אז יודפס לפני במעבר post-order בכל מקרה. אבל שוב, אם , אז יכול להיות צאצא שמאלי של , או צאצא שמאלי של הורה של (לדוגמה ).
  3. כפי שהתרשים מראה, אם , אין בהכרח שום קשר בין מספר האיברים בתת-העץ של לבין זה של .

לעומת זאת, השילוב של סדר post-order וdescendants מספיק.



משפט:

נגדיר:

  1. הוא מספר הpost-order של ילדו השמאלי של .
  2. הוא מספר הdescendants של ילדו השמאלי של .

אז כל צומת בתת העץ השמאלי הוא בעל מספר post-order ב.


הוכחה: מספרי הpost-order של ילדו השמאלי של הם מספרים עוקבים, שהאחרון שבהם הוא .

מהמשפט האחרון ברור כיצד יש למצוא האם צומת כלשהו nd-y הוא צאצא של צומת כלשהו nd-x, בהנחה שתוכן הראשון הוא , תוכן השני הוא , ו:

  1. אם לnd-x אין ילד שמאלי - התשובה שלילית.
  2. אחרת:
    1. קובעים כ את Postorder-Num(nd.l-child).
    2. קובעים כ את Descendants(nd.l-child).
    3. בודקים האם {Postorder-Num(nd-y) גדול או שווה ל.


עכשיו תורכם:

חשוב האם שילובי פונקציות שונים יפתרו את הבעיה גם כן.