AVL Tree

‫הרצאה ‪ :8‬עץ בינארי מאוזן‪AVL Tree ,‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪1‬‬
‫הגדרה ומטרה‬
‫גובהו של עץ בינארי מוגדר להיות המסלול הארוך שניתן ללכת עליו מהשורש‬
‫לאחד העלים‪.‬‬
‫ראינו שפעולות בסיסיות בעץ חיפוש בינארי‪ ,‬כמו חיפוש‪ ,‬הכנסה והוצאת ערך‬
‫תלוי בגובהו של העץ‪.‬‬
‫ולכן‬
‫מטרה‪ :‬להקטין ככל הניתן את גובהו של עץ חיפוש בינארי‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪2‬‬
‫‪AVL Tree‬‬
‫‪ AVL Tree‬הוא סוג של עץ חיפוש בינארי מאוזן‪ .‬שמו ניתן לו על שם ממציאיו‪:‬‬
‫‪Adelson-Velskii and Landis‬‬
‫הגדרת ‪: AVL Tree‬‬
‫‪ .1‬העץ הוא עץ חיפוש בינארי‬
‫‪ .2‬הבדל הגבהים של תתי העץ היוצאים מכל צומת הוא לכל היותר ‪1‬‬
‫‪ .3‬כל תת עץ הוא ‪.AVL Tree‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪3‬‬
‫דוגמאות להגדרה‬
‫לא ‪AVL‬‬
‫‪AVL‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪4‬‬
‫גובהו של עץ ‪AVL‬‬
‫• הגדרה‪ :‬נאמר שעץ בינארי ‪ T‬בעל ‪ n‬צמתים הוא מאוזן אם‬
‫)‪h(T )  O(log n‬‬
‫• טענה (ללא הוכחה)‪ :‬עץ ‪ AVL‬הוא עץ מאוזן‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪5‬‬
‫פקטור האיזון של צומת ב‪AVL -‬‬
‫על מנת לתחזק עץ ‪ AVL‬כך שישמור תמיד על איזון‪ ,‬נוסיף ארגומנט חדש שיקרא‬
‫"פקטור האיזון" לצמתי העץ‪ ,‬שיכיל את המידע על הפרשי הגובה בין תת העץ‬
‫הימני לתת העץ השמאלי של הצומת‪.‬‬
‫• אם תת העץ הימני גבוה ב – ‪ i‬מתת העץ השמאלי‪ ,‬אזי נסמן "כבד ימני" (‪)+i‬‬
‫• אם תת העץ השמאלי גבוה ב – ‪ i‬מתת העץ הימני‪ ,‬אזי נסמן "כבד שמאלי" (‪)-i‬‬
‫• אם שני תתי העץ הם באותו גובה‪ ,‬נסמן "מאוזן" (‪)0‬‬
‫אם גורם האיזון של צומת גדל ל – ‪ 2‬או ל ‪ )-2( -‬אזי יש לבצע רוטציה כדי לאזן את‬
‫תת העץ שהיא השורש שלו‪.‬‬
‫•הערה‪ :‬לרוב מוסיפים לכל צומת גם פקטור המציין את גובה תת העץ שהצומת‬
‫היא השורש שלו‪.‬‬
‫‪6‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫רוטציה שמאלית‬
‫נניח שתת העץ הימני של ‪ p‬גבוה ב ‪ 2 -‬מתת העץ השמאלי‪ .‬אזי‬
‫נבצע את הרוטציה בהתאם למצבים הבאים‪:‬‬
‫אם ‪ w‬גבוה מ – ‪ v‬או שווה לו‪:‬‬
‫‪.1‬‬
‫‪ p‬יהפוך להיות הבן השמאלי של ‪u‬‬
‫‪p‬‬
‫‪ v .2‬יהפוך להיות הבן הימני של ‪. p‬‬
‫אחרת‪:‬‬
‫‪u‬‬
‫‪ .1‬בצע גלגול ימני בודד ל – ‪u‬‬
‫‪ .2‬בצע גלגול שמאלי בודד ל – ‪.p‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪w‬‬
‫‪v‬‬
‫‪7‬‬
‫‪p‬‬
‫‪u‬‬
‫‪u‬‬
‫‪w‬‬
‫‪p‬‬
‫‪w‬‬
‫‪v‬‬
‫‪v‬‬
‫‪ w‬גבוה מ – ‪v‬‬
‫‪p‬‬
‫‪v‬‬
‫‪u‬‬
‫‪w‬‬
‫‪u‬‬
‫‪v‬‬
‫‪p‬‬
‫‪w‬‬
‫‪ v‬גבוה מ – ‪w‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪8‬‬
‫דוגמא ראשונה לרוטציה שמאלית‬
‫‪50‬‬
‫‪70‬‬
‫‪80‬‬
‫‪78 85‬‬
‫‪30‬‬
‫‪40‬‬
‫‪20‬‬
‫‪25 35 45‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪10‬‬
‫‪9‬‬
‫דוגמא ראשונה לרוטציה שמאלית‬
‫‪50‬‬
‫‪+2‬‬
‫‪p‬‬
‫‪30‬‬
‫‪70‬‬
‫‪0‬‬
‫‪80 u‬‬
‫‪0‬‬
‫‪40‬‬
‫‪20‬‬
‫‪0‬‬
‫‪v 78 85 w‬‬
‫‪25 35 45‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪10‬‬
‫‪10‬‬
‫דוגמא ראשונה לרוטציה שמאלית‬
‫‪50‬‬
‫‪-1‬‬
‫‪80 u‬‬
‫גלגול שמאלי‬
‫ל‪p-‬‬
‫‪0‬‬
‫‪30‬‬
‫‪+1‬‬
‫‪w‬‬
‫‪70 p 85‬‬
‫‪40‬‬
‫‪20‬‬
‫‪0‬‬
‫‪v 78‬‬
‫‪25 35 45‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪10‬‬
‫‪11‬‬
‫דוגמא שניה לרוטציה שמאלית‬
‫‪50‬‬
‫‪70‬‬
‫‪80‬‬
‫‪85‬‬
‫‪30‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20‬‬
‫‪35‬‬
‫‪75‬‬
‫‪72‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪12‬‬
‫דוגמא שניה לרוטציה שמאלית‬
‫‪50‬‬
‫‪+2‬‬
‫‪30‬‬
‫‪70 p‬‬
‫‪-1‬‬
‫‪0‬‬
‫‪80 u‬‬
‫‪60‬‬
‫‪0‬‬
‫‪85 w‬‬
‫‪-1‬‬
‫‪v 75‬‬
‫‪0‬‬
‫‪40‬‬
‫‪20‬‬
‫‪35‬‬
‫‪72‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪13‬‬
‫דוגמא שניה לרוטציה שמאלית‬
‫‪50‬‬
‫‪+3‬‬
‫‪70 p‬‬
‫גלגול ימני‬
‫בודד ל ‪u -‬‬
‫‪30‬‬
‫‪+2‬‬
‫‪0‬‬
‫‪75 v‬‬
‫‪60‬‬
‫‪-1‬‬
‫‪80 u‬‬
‫‪0‬‬
‫‪72‬‬
‫‪40‬‬
‫‪20‬‬
‫‪35‬‬
‫‪0‬‬
‫‪85 w‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪14‬‬
‫דוגמא שניה לרוטציה שמאלית‬
‫‪50‬‬
‫‪0‬‬
‫‪75 v‬‬
‫גלגול שמאלי‬
‫בודד ל ‪p -‬‬
‫‪-1‬‬
‫‪30‬‬
‫‪0‬‬
‫‪70 p 80 u‬‬
‫‪0‬‬
‫‪85 w‬‬
‫‪0‬‬
‫‪72‬‬
‫‪40‬‬
‫‪0‬‬
‫‪20‬‬
‫‪35 60‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪15‬‬
‫רוטציה ימנית‬
‫נניח שתת העץ השמאלי של ‪ p‬גבוה ב – ‪ 2‬מתת העץ הימני‪.‬‬
‫אזי נבצע את הרוטציה בהתאם למצבים הבאים‪:‬‬
‫אם ‪ w‬גבוה מ – ‪ v‬או שווה לו ‪:‬‬
‫‪.1‬‬
‫‪ p‬יהפוך להיות הבן הימני של ‪u‬‬
‫‪p‬‬
‫‪ v .2‬יהפוך להיות הבן השמאלי של ‪. p‬‬
‫‪u‬‬
‫אחרת‪:‬‬
‫‪ .1‬בצע גלגול שמאלי בודד ל – ‪u‬‬
‫‪v‬‬
‫‪w‬‬
‫‪ .2‬בצע גלגול ימני בודד ל – ‪.p‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪16‬‬
‫‪p‬‬
‫‪u‬‬
‫‪u‬‬
‫‪w‬‬
‫‪p‬‬
‫‪v‬‬
‫‪v‬‬
‫‪w‬‬
‫‪ w‬גבוה מ – ‪v‬‬
‫‪p‬‬
‫‪v‬‬
‫‪p‬‬
‫‪u‬‬
‫‪u‬‬
‫‪w‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד ‪ v‬גבוה מ – ‪w‬‬
‫‪w‬‬
‫‪v‬‬
‫‪17‬‬
‫דוגמא ראשונה לרוטציה ימנית‬
‫‪50‬‬
‫‪70‬‬
‫‪80‬‬
‫‪30‬‬
‫‪60‬‬
‫‪20‬‬
‫‪40‬‬
‫‪25‬‬
‫‪10‬‬
‫‪9‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪18‬‬
‫דוגמא ראשונה לרוטציה ימנית‬
‫‪50‬‬
‫‪-2‬‬
‫‪p 30‬‬
‫‪70‬‬
‫‪0‬‬
‫‪80‬‬
‫‪60‬‬
‫‪-1‬‬
‫‪u 20‬‬
‫‪40‬‬
‫‪0‬‬
‫‪25 v‬‬
‫‪-1‬‬
‫‪w 10‬‬
‫‪0‬‬
‫‪9‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪19‬‬
‫דוגמא ראשונה לרוטציה ימנית‬
‫‪50‬‬
‫‪0‬‬
‫‪u 20‬‬
‫‪70‬‬
‫‪0‬‬
‫‪80‬‬
‫‪-1‬‬
‫‪w 10‬‬
‫‪30 p 60‬‬
‫‪0‬‬
‫‪0‬‬
‫‪40‬‬
‫‪25‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪0‬‬
‫‪v 9‬‬
‫גלגול ימני‬
‫ל‪p-‬‬
‫‪20‬‬
‫דוגמא שניה לרוטציה ימנית‬
‫‪50‬‬
‫‪70‬‬
‫‪80‬‬
‫‪30‬‬
‫‪60‬‬
‫‪20‬‬
‫‪40‬‬
‫‪25‬‬
‫‪10‬‬
‫‪22 28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪21‬‬
‫דוגמא שניה לרוטציה ימנית‬
‫‪50‬‬
‫‪-2‬‬
‫‪p 30‬‬
‫‪70‬‬
‫‪0‬‬
‫‪80‬‬
‫‪60‬‬
‫‪+1‬‬
‫‪u 20‬‬
‫‪40‬‬
‫‪0‬‬
‫‪0‬‬
‫‪25 v‬‬
‫‪0‬‬
‫‪w 10‬‬
‫‪0‬‬
‫‪22 28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪22‬‬
‫דוגמא שניה לרוטציה ימנית‬
‫‪50‬‬
‫‪-2‬‬
‫‪70‬‬
‫‪80‬‬
‫‪p 30‬‬
‫‪60‬‬
‫‪0‬‬
‫‪-1‬‬
‫‪40‬‬
‫‪25‬‬
‫‪0‬‬
‫‪v‬‬
‫‪0‬‬
‫‪28‬‬
‫‪u 20‬‬
‫גלגול שמאלי‬
‫בודד ל ‪u -‬‬
‫‪0‬‬
‫‪0‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪22‬‬
‫‪w 10‬‬
‫‪23‬‬
‫דוגמא שניה לרוטציה ימנית‬
‫‪50‬‬
‫‪0‬‬
‫‪25‬‬
‫‪70‬‬
‫‪v‬‬
‫‪0‬‬
‫‪80‬‬
‫‪0‬‬
‫‪u 20 p 30‬‬
‫‪60‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪w 10 22 28 40‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫גלגול ימני‬
‫בודד ל ‪p -‬‬
‫‪24‬‬
‫הוכחת נכונותם של הגלגולים‬
‫•‬
‫•‬
‫•‬
‫•‬
‫טענה‪ :‬רוטציות בעץ משמרות את היותו עץ חיפוש בינארי‬
‫הוכחה‪ :‬מספיק להסתכל על שני הגלגולים הפשוטים‪:‬‬
‫גלגול ימני‪:‬‬
‫– ‪ u‬בן שמאלי של ‪ ,p‬לכן קטן ממנו‪ ,‬ולכן העברתו של ‪ p‬להיות בן ימני‬
‫של ‪ u‬תקינה‬
‫– ‪ v‬הוא צאצא שמאלי של ‪ ,p‬ואחרי הגלגול הוא נשאר בתת העץ‬
‫השמאלי של ‪.p‬‬
‫– תת העץ הימני של ‪ p‬ותת העץ השמאלי של ‪ u‬נותרים כפי שהם‪.‬‬
‫גלגול שמאלי‪ :‬הוכחה דומה לגלגול ימני‬
‫העץ אחרי גלגול נשאר עץ חיפוש בינארי‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪25‬‬
‫אבחנה חשובה‬
‫הפרת איזון בעץ בזמן הכנסת או הוצאת איבר‪ ,‬תתכן רק בצמתים שהן על‬
‫מסלול הכנסת או הוצאת האיבר‬
‫הערה חשובה‬
‫עדכוני פקטורי האיזון והגבהים בזמן רוטציות נעשות רק על הצמתים‬
‫המוזזים‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪26‬‬
‫הכנסת איבר לעץ ‪AVL‬‬
‫‪ .1‬הכנס את ‪ s‬לעץ‪ ,‬והכנס את כל הצמתים שעברת במסלול למחסנית (לא‬
‫כולל העלה החדש) ויהי ‪ x‬העלה החדש שנוסף לעץ‪:‬‬
‫‪ .2‬הגדר פקטור האיזון של ‪h( x)  0 ,0 = x‬‬
‫‪ .3‬כל עוד ‪ x‬איננו השורש‪ ,‬בצע‪:‬‬
‫‪ .a‬הוצא את ‪ p‬מהמחסנית (‪ P‬הוא האבא של ‪ x‬בעץ)‬
‫‪ .b‬אם ‪ h( p)  h( x)  1‬סיים‪.‬‬
‫‪ .c‬הצב ‪h( p)  h( x)  1‬‬
‫‪ .d‬עדכן את פקטור האיזון של ‪p‬‬
‫‪ .e‬אם ב‪ p-‬הופר האיזון‪ ,‬בצע רוטציה וסיים‪.‬‬
‫‪ .f‬הצב ‪x  p‬‬
‫מתבצעת רוטציה אחת לכל היותר‬
‫ההכנסה‬
‫הערה‪ :‬שימו לב שבזמן תהליך‬
‫סמסטר א 'תשס"ד‬
‫מבנה נתונים ‪,‬‬
‫‪27‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 0‬‬
‫‪50‬‬
‫‪0 0‬‬
‫‪80‬‬
‫‪1 0‬‬
‫‪-1 2‬‬
‫‪70‬‬
‫‪30‬‬
‫‪0 0‬‬
‫‪60‬‬
‫‪1 0‬‬
‫‪00‬‬
‫‪20‬‬
‫‪40‬‬
‫‪00‬‬
‫‪25‬‬
‫‪0 0‬‬
‫‪10‬‬
‫העץ לפני ההכנסה‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪28‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי החיפוש‪:‬‬
‫‪50‬‬
‫‪10‬‬
‫‪2 -1‬‬
‫‪70‬‬
‫‪30‬‬
‫‪50 30 20 25‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪10‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20‬‬
‫‪00‬‬
‫‪25‬‬
‫‪00‬‬
‫‪10‬‬
‫‪00‬‬
‫‪28 x‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪29‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:25‬‬
‫‪50‬‬
‫‪10‬‬
‫‪2 -1‬‬
‫‪70‬‬
‫‪30‬‬
‫‪50 30 20‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪10‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20‬‬
‫‪h(p) <> h(x)+1‬‬
‫‪00‬‬
‫‪00‬‬
‫‪25 p‬‬
‫‪10‬‬
‫‪00‬‬
‫‪28 x‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪30‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:25‬‬
‫‪50‬‬
‫‪h(p) = h(x)+1‬‬
‫וכן עדכון פקטור‬
‫האיזון של ‪p‬‬
‫‪10‬‬
‫‪2 -1‬‬
‫‪70‬‬
‫‪30‬‬
‫‪50 30 20‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪10‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20‬‬
‫‪1 +1‬‬
‫‪00‬‬
‫‪25 p‬‬
‫‪10‬‬
‫‪00‬‬
‫‪28 x‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪31‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:20‬‬
‫‪50‬‬
‫‪h(p) <> h(x)+1‬‬
‫‪10‬‬
‫‪2 -1‬‬
‫‪70‬‬
‫‪30‬‬
‫‪50 30‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪10‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20 p‬‬
‫‪1 +1‬‬
‫‪00‬‬
‫‪25 x‬‬
‫‪10‬‬
‫‪00‬‬
‫‪28‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪32‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:20‬‬
‫‪50‬‬
‫‪10‬‬
‫‪2 -1‬‬
‫‪70‬‬
‫‪30‬‬
‫‪50 30‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪2 +1‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20 p‬‬
‫‪h(p) = h(x)+1‬‬
‫ועדכון פקטור האיזון של ‪p‬‬
‫‪1 +1‬‬
‫‪00‬‬
‫‪25 x‬‬
‫‪10‬‬
‫‪00‬‬
‫‪28‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪33‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:30‬‬
‫‪50‬‬
‫‪10‬‬
‫‪2 -1‬‬
‫‪70‬‬
‫‪30 p‬‬
‫‪50‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪2 +1‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20 x‬‬
‫‪1 +1‬‬
‫‪25‬‬
‫‪h(p) <> h(x)+1‬‬
‫‪00‬‬
‫‪10‬‬
‫‪00‬‬
‫‪28‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪34‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:30‬‬
‫‪50‬‬
‫‪10‬‬
‫‪3 -2‬‬
‫‪70‬‬
‫‪30 p‬‬
‫‪50‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪2 +1‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20 x‬‬
‫‪1 +1‬‬
‫‪25‬‬
‫‪h(p) = h(x)+1‬‬
‫ועדכון פקטור האיזון של ‪p‬‬
‫‪00‬‬
‫‪10‬‬
‫‪00‬‬
‫‪28‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪35‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:30‬‬
‫‪50‬‬
‫הפרת איזון ב ‪p -‬‬
‫‪10‬‬
‫‪3 -2‬‬
‫‪70‬‬
‫‪30 p‬‬
‫‪50‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪2 +1‬‬
‫‪80‬‬
‫‪60‬‬
‫‪40‬‬
‫‪20 u‬‬
‫‪1 +1‬‬
‫‪00‬‬
‫‪25 v‬‬
‫‪w 10‬‬
‫‪00‬‬
‫‪28‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪36‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:30‬‬
‫‪50‬‬
‫‪-2‬‬
‫‪10‬‬
‫‪p 30‬‬
‫‪70‬‬
‫‪00‬‬
‫‪00‬‬
‫‪80‬‬
‫‪60‬‬
‫‪50‬‬
‫‪0‬‬
‫‪-1‬‬
‫‪40‬‬
‫‪25‬‬
‫‪0‬‬
‫גלגול שמאלי‬
‫בודד ל ‪u -‬‬
‫‪v‬‬
‫‪0‬‬
‫‪28‬‬
‫‪u 20‬‬
‫‪0‬‬
‫‪0‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪22‬‬
‫‪w 10‬‬
‫‪37‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫תיאור המחסנית‬
‫אחרי הוצאת ‪:30‬‬
‫‪50‬‬
‫‪20‬‬
‫‪10‬‬
‫‪25‬‬
‫‪70‬‬
‫גלגול ימני‬
‫בודד ל ‪p -‬‬
‫‪00‬‬
‫‪00‬‬
‫‪80‬‬
‫‪60‬‬
‫‪10‬‬
‫‪00‬‬
‫‪v‬‬
‫‪50‬‬
‫‪10‬‬
‫‪u 20 p 30‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪w 10 22 28 40‬‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪38‬‬
‫דוגמא להכנסת איבר לעץ ‪AVL‬‬
‫‪3 -1‬‬
‫‪50‬‬
‫‪20‬‬
‫‪10‬‬
‫‪25‬‬
‫‪70‬‬
‫‪00‬‬
‫‪00‬‬
‫‪80‬‬
‫‪60‬‬
‫‪00‬‬
‫‪10‬‬
‫‪10‬‬
‫‪30‬‬
‫‪20‬‬
‫‪00‬‬
‫‪00‬‬
‫‪00‬‬
‫‪10 22 28 40‬‬
‫ריקון המחסנית‬
‫והחזרת העץ המאוזן‬
‫הכנסת האיבר ‪28‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪39‬‬
‫הוצאת איבר מעץ ‪AVL‬‬
‫‪ .1‬הוצא את ‪ s‬מהעץ‪ ,‬והכנס את כל הצמתים שעברת במסלול למחסנית (כולל‬
‫האיבר המוצא אם יש צורך במקרה של ביטול צומת עם שני בנים)‬
‫‪ .2‬לכל צומת ‪ x‬במסלול ההוצאה בצע את הצעדים הבאים‪:‬‬
‫‪ .a‬עדכן את פקטור האיזון של ‪ x‬לפי הפרש גבהי תתי העצים שהוא‬
‫השורש שלהם ברגע זה‬
‫‪ .b‬עדכן את גובהו של ‪ x‬לפי גבהי תתי העצים המעודכנים שלו‬
‫‪ .c‬אם פקטור האיזון הוא ‪ 2‬או ‪ -2‬אז בצע רוטציה מתאימה והמשך ‪.‬‬
‫‪ .d‬אם גובה תת העץ ש – ‪ x‬הוא השורש שלו לא השתנה‪ ,‬סיים‬
‫‪ .e‬אם גובה תת העץ השתנה אך פקטור האיזון תקין‪ ,‬המשך‪.‬‬
‫הערה‪ :‬שימו לב שבזמן התהליך יתכנו מספר רוטציות‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪40‬‬
‫דוגמא להוצאת איבר מעץ ‪AVL‬‬
‫‪4 -1‬‬
‫‪50‬‬
‫‪2 +1‬‬
‫‪3 +1‬‬
‫‪70‬‬
‫‪10‬‬
‫‪00‬‬
‫‪80‬‬
‫‪00‬‬
‫‪85‬‬
‫‪30‬‬
‫‪2 +1‬‬
‫‪60‬‬
‫‪1 -1‬‬
‫‪40‬‬
‫‪20‬‬
‫‪00‬‬
‫‪1 +1‬‬
‫‪00‬‬
‫‪00‬‬
‫‪75‬‬
‫‪44‬‬
‫‪35‬‬
‫‪10‬‬
‫‪00‬‬
‫‪48‬‬
‫העץ לפני ההוצאה‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪41‬‬
‫דוגמא להוצאת איבר מעץ ‪AVL‬‬
‫‪4 -1‬‬
‫‪50‬‬
‫‪2 +1‬‬
‫‪3 +1‬‬
‫‪70‬‬
‫‪10‬‬
‫‪00‬‬
‫‪85‬‬
‫‪30‬‬
‫‪00‬‬
‫‪80‬‬
‫המחסנית‬
‫ההתחלתית‪:‬‬
‫‪2 +1‬‬
‫‪60‬‬
‫‪1 -1‬‬
‫‪40‬‬
‫‪50 "30" 40‬‬
‫‪20‬‬
‫‪00‬‬
‫‪1 +1‬‬
‫‪00‬‬
‫‪00‬‬
‫‪75‬‬
‫‪44‬‬
‫‪35‬‬
‫‪10‬‬
‫‪00‬‬
‫‪48‬‬
‫הוצאת האיבר ‪30‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪42‬‬
‫דוגמא להוצאת איבר מעץ ‪AVL‬‬
‫‪4 -1‬‬
‫‪50‬‬
‫‪2 +1‬‬
‫‪3 +1‬‬
‫‪70‬‬
‫‪10‬‬
‫‪00‬‬
‫עדכון פקטור האיזון‬
‫של ‪x‬‬
‫הפרת איזון ב ‪x -‬‬
‫‪85‬‬
‫‪35‬‬
‫‪00‬‬
‫‪80‬‬
‫המחסנית אחרי‬
‫הוצאת ‪:40‬‬
‫‪60‬‬
‫‪2 +2‬‬
‫‪1 -1‬‬
‫‪40 x‬‬
‫‪20‬‬
‫"‪50 "30‬‬
‫‪00‬‬
‫‪1 +1‬‬
‫‪00‬‬
‫‪75‬‬
‫‪44 u‬‬
‫‪10‬‬
‫‪00‬‬
‫‪48 w‬‬
‫הוצאת האיבר ‪30‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪43‬‬
‫דוגמא להוצאת איבר מעץ ‪AVL‬‬
‫‪4 -1‬‬
‫‪50‬‬
‫‪2 +1‬‬
‫‪3 +1‬‬
‫‪70‬‬
‫‪10‬‬
‫‪00‬‬
‫רוטציה שמאלית‬
‫ל–‪x‬‬
‫גובה תת העץ‬
‫של ‪ x‬השתנה‬
‫‪85‬‬
‫‪35‬‬
‫‪00‬‬
‫‪80‬‬
‫‪10‬‬
‫‪60‬‬
‫‪00‬‬
‫‪1 -1‬‬
‫‪44‬‬
‫‪00‬‬
‫‪75‬‬
‫המחסנית אחרי‬
‫הוצאת ‪:40‬‬
‫‪20‬‬
‫‪00‬‬
‫‪x 40 48‬‬
‫הוצאת האיבר ‪30‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫"‪50 "30‬‬
‫‪00‬‬
‫‪10‬‬
‫‪44‬‬
‫דוגמא להוצאת איבר מעץ ‪AVL‬‬
‫‪4 -1‬‬
‫‪3 +1‬‬
‫‪50‬‬
‫‪2 +1‬‬
‫‪20‬‬
‫‪70‬‬
‫‪10‬‬
‫אין צורך ברוטציה‪,‬‬
‫אבל גובה תת העץ‬
‫ש – ‪ x‬מצביע עליו‬
‫השתנה מזה‬
‫שנשמר במחסנית‬
‫‪00‬‬
‫‪85‬‬
‫‪x 35‬‬
‫‪00‬‬
‫‪80‬‬
‫‪60‬‬
‫‪00‬‬
‫‪10‬‬
‫‪1 -1‬‬
‫‪44‬‬
‫‪20‬‬
‫‪00‬‬
‫‪75‬‬
‫המחסנית אחרי‬
‫הוצאת "‪:"30‬‬
‫‪00‬‬
‫‪40 48‬‬
‫הוצאת האיבר ‪30‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪50‬‬
‫‪00‬‬
‫‪10‬‬
‫‪45‬‬
‫דוגמא להוצאת איבר מעץ ‪AVL‬‬
‫‪30‬‬
‫‪x 50‬‬
‫‪2 +1‬‬
‫‪20‬‬
‫‪70‬‬
‫‪10‬‬
‫עדכון פקטור‬
‫האיזון של ‪ :x‬תקין‬
‫‪00‬‬
‫‪85‬‬
‫‪35‬‬
‫‪00‬‬
‫‪80‬‬
‫‪10‬‬
‫‪60‬‬
‫‪00‬‬
‫‪1 -1‬‬
‫‪44‬‬
‫‪00‬‬
‫‪75‬‬
‫המחסנית אחרי‬
‫הוצאת ‪ :50‬ריקה‬
‫‪20‬‬
‫‪00‬‬
‫‪40 48‬‬
‫הוצאת האיבר ‪30‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪00‬‬
‫‪10‬‬
‫‪46‬‬
‫דוגמא להוצאת איבר מעץ ‪AVL‬‬
‫‪30‬‬
‫‪50‬‬
‫‪2 +1‬‬
‫‪20‬‬
‫‪70‬‬
‫‪10‬‬
‫‪00‬‬
‫‪80‬‬
‫‪00‬‬
‫‪85‬‬
‫‪35‬‬
‫‪10‬‬
‫‪60‬‬
‫‪00‬‬
‫‪75‬‬
‫‪1 -1‬‬
‫‪44‬‬
‫‪00‬‬
‫‪20‬‬
‫‪00‬‬
‫‪40 48‬‬
‫האיבר ‪30‬‬
‫העץ המאוזן אחרי הוצאת‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪00‬‬
‫‪10‬‬
‫‪47‬‬
‫דוגמא‬
‫‪http://www.seanet.com/users/arsen/avltree.html‬‬
‫הערה‪ :‬שימו לב שבדוגמא זו‪ ,‬כאשר מורידים צומת מהעץ‪ ,‬המחליף הוא‬
‫הקודם לערך ולא העוקב‪ ,‬כפי שלמדנו בהרצאה ‪7‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪48‬‬
‫מבנה נתונים ‪,‬סמסטר א 'תשס"ד‬
‫‪49‬‬