בעצם, עץ אדום-שחור הוא עץ חיפוש בינארי שמאוזן בקירוב. כל צומת מסומן בצבע אדום או שחור. העצם הזה שומר על פעולות כמו הכנסת איבר, מחיקה וחיפוש בזמן טוב גם במקרה הגרוע, O(log n). O(log n) זה אומר שהזמן גדל לאט יחסית כאשר מספר האיברים גדל.
עץ חיפוש בינארי מאפשר חיפוש מהיר כשהמידע מסודר. אך אם העץ יוצא מאיזון, החיפוש עלול להימשך מאד. עץ אדום-שחור מונע זאת על ידי כללים שמגבילים כמה מסלולים יכולים להיות ארוכים ביחס לאחרים. כתוצאה מכך, הגובה של העץ נשאר קטן יחסית, והפעולות נשארות מהירות.
מבנה הנתונים הומצא ב-1972 על ידי Rudolf Bayer. השם "עץ אדום-שחור" הופיע במאמר של Robert Sedgewick ו־Leonidas Guibas מ-1978.
עלים הם ההפניות הריקות בעץ, שמייצגות "כלום" (null). ברוב היישומים העלים אינם מאוחסנים בפועל אלא מיוצגים כ-null. לעתים מדברים על צבע הקשתות במקום הצמתים, אבל זה אותו רעיון בפועל.
# כל צומת הוא או אדום או שחור.
# כל העלים (ההפניות הריקות) שחורים.
# צומת אדום לא יכול להיות עם צאצא אדום.
# לכל מסלול מהשורש לאלה יש אותו מספר צמתים שחורים.
# כתוצאה מכך, המסלול הארוך ביותר אינו ארוך מפי שניים מהמסלול הקצר ביותר.
(לעיתים מוסיפים שהשורש שחור, אך זה רק נוח להסבר.)
שינוי מבנה העץ לעשות באמצעות רוטציות. יש שתי רוטציות: שמאלית וימנית. רוטציה משנה את הסדר המקומי של צמתים בלי לשבור את סידור עץ החיפוש.
ברוטציה ימנית צומת שמאלי עולה למקום האב, והאב יורד להיות בן ימני שלו. הרוטציה השמאלית היא ההפך.
החלפת צבע פשוטה מחליפה את צבע הצומת מאדום לשחור ולהפך.
מוסיפים את האיבר לפי כללי עץ החיפוש הבינארי. האיבר החדש מחליף עלה ריק ושצבעו אדום. לאחר ההוספה מבצעים תיקונים בעזרת שינוי צבעים ורוטציות עד שיושמו כל כללי העץ. צעדי התיקון כוללים מקרים בהם הדוד של הצומת אדום והחלפת צבעים, או מקרים בהם מבצעים רוטציות כדי לאזן את המבנה. בסוף תמיד מצבעים את השורש בשחור.
אם לצומת שיש למחוק שני ילדים, מחליפים אותו עם היורש (הבן השמאלי ביותר בתת-העץ הימני) ואז מוחקים. אם לצומת ילד אחד בלבד, הצבע של הילד לצורך האיזון יצטרך להיות שחור, ולכן ניתן להחליפו במקום הצומת ולצביעתו בשחור. מחיקת עלה אדום פשוטה ותיחשב פחות בעייתית. מחיקה של עלה שחור יוצרת "חוסר-איזון" שדורש סדרת תיקונים מורכבת יותר, הכוללת כמה מקרים של רוטציות והחלפות צבעים.
עצי אדום-שחור משמשים לעתים קרובות ליישום מילון (map/set) ולמבני נתונים שמצריכים חיפושים, הכנסת נתונים ומחיקות בזמן מהיר.
עץ אדום-שחור הוא עץ שמאורגן כדי לחפש דברים מהר. כל נקודה (צומת) בצבע אדום או שחור. צבעים אלה עוזרים לשמור את העץ מאוזן.
עץ חיפוש בינארי מסודר כך שמציאת פריט קלה. אם העץ לא מאוזן, החיפוש איטי. בצבעים של עץ אדום-שחור מונעים מצבים כאלה.
עלים הם הפניות ריקות, כלומר "כלום". בדרך כלל לא שומרים עליהם בזיכרון.
# כל צומת אדום או שחור.
# כל העלים שחורים.
# צומת אדום לא יכול להיות ליד צומת אדום.
# כל מסלול מהשורש לאחד העלים מכיל מספר זהה של צמתים שחורים.
# בגלל זה, העץ נשאר די מאוזן והחיפושים מהירים.
הרוטציה היא פעולה שמחליפה צמתים בין אב לבן. יש רוטציה ימנית ורוטציה שמאלית. פעולות אלו לא משנות את המיון.
מכניסים את הערך כמו בעץ רגיל. הצומת החדש יהיה אדום. אם זה שובר כללים, משנים צבעים ועושים רוטציות עד שהכל תקין. בסוף השורש יהיה שחור.
אם יש לצומת שני ילדים, מחליפים אותו עם יורש מתאים ומוחקים. אם יש ילד אחד, מחליפים אותו והופכים את הצבע לשחור. מחיקה של עלה שחור דורשת תיקונים נוספים.
עצי אדום-שחור משמשים ליישום מילון. מילון הוא מבנה שמקשר בין מפתחות לערכים.
תגובות גולשים