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

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

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



משפט:

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

  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) גדול או שווה ל .


 

עכשיו תורכם:

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