logo

מבנה נתוני עץ

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

כמה גורמים נלקחים בחשבון לבחירת מבנה הנתונים:

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

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

עֵץ

העץ לעיל מציג את היררכיית ארגון של חברה כלשהי. במבנה הנ'ל, ג'ון האם ה מנכ'ל של החברה, ולג'ון יש שני דוחות ישירים בשם סטיב ו רוהן . לסטיב יש שלושה דיווחים ישירים לי, בוב, אלה איפה סטיב הוא מנהל. לבוב יש שני דוחות ישירים בשם יהיה ו אמה . אמה יש שני דוחות ישירים בשם טום ו ראג' . לטום יש דו'ח ישיר אחד בשם שטר כסף . המבנה הלוגי המסוים הזה ידוע בשם א עֵץ . המבנה שלו דומה לעץ האמיתי, ולכן הוא נקרא א עֵץ . במבנה זה, ה שורש נמצא בראש, וענפיו נעים בכיוון מטה. לכן, אנו יכולים לומר שמבנה הנתונים של העץ הוא דרך יעילה לאחסון הנתונים בצורה היררכית.

בואו נבין כמה נקודות מפתח של מבנה הנתונים של העץ.

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

כמה מונחים בסיסיים המשמשים במבנה הנתונים של עץ.

מיתר יצוק ל-int

הבה נבחן את מבנה העץ, המוצג להלן:

עֵץ

במבנה לעיל, כל צומת מסומן במספר כלשהו. כל חץ המוצג באיור שלמעלה ידוע בשם a קישור בין שני הצמתים.

    שורש:צומת השורש הוא הצומת העליון בהיררכיית העצים. במילים אחרות, צומת השורש הוא זה שאין לו שום הורה. במבנה לעיל, צומת שמספרו 1 הוא צומת השורש של העץ. אם צומת מקושר ישירות לצומת אחר, זה ייקרא קשר הורה-ילד.צומת ילד:אם הצומת הוא צאצא של צומת כלשהו, ​​אז הצומת ידוע כצומת צאצא.הוֹרֶה:אם הצומת מכיל תת-צומת כלשהו, ​​נאמר שהצומת הוא האב של אותו תת-צומת.אָח אוֹ אָחוֹת:הצמתים שיש להם אותו הורה ידועים בתור אחים.צומת עלה:-הצומת של העץ, שאין לו שום צומת ילד, נקרא צומת עלה. צומת עלה הוא הצומת התחתון ביותר של העץ. יכול להיות כל מספר של צמתים עלים בעץ כללי. צמתים עלים יכולים להיקרא גם צמתים חיצוניים.צמתים פנימיים:לצומת יש לפחות צומת צאצא אחד המכונה an פְּנִימִי צומת אב קדמון:-אב קדמון של צומת הוא כל צומת קודמו בנתיב מהשורש לצומת זה. לצומת השורש אין אבות. בעץ המוצג בתמונה לעיל, הצמתים 1, 2 ו-5 הם האבות הקדמונים של צומת 10.צאֱצא:היורש המיידי של הצומת הנתון ידוע בתור צאצא של צומת. באיור שלמעלה, 10 הוא הצאצא של צומת 5.

מאפייני מבנה הנתונים של עץ

    מבנה נתונים רקורסיבי:העץ ידוע גם בשם א מבנה נתונים רקורסיבי . ניתן להגדיר עץ רקורסיבי מכיוון שהצומת המובחן במבנה נתוני עץ ידוע כ- צומת שורש . צומת השורש של העץ מכיל קישור לכל השורשים של תתי העצים שלו. תת העץ השמאלי מוצג בצבע הצהוב באיור למטה, ותת העץ הימני מוצג בצבע האדום. ניתן לפצל עוד את תת-העץ השמאלי לתת-עצים המוצגים בשלושה צבעים שונים. רקורסיה פירושה צמצום של משהו באופן דומה לעצמו. אז, מאפיין רקורסיבי זה של מבנה נתוני העץ מיושם ביישומים שונים.
    עֵץ מספר קצוות:אם יש n צמתים, אז יהיו n-1 קצוות. כל חץ במבנה מייצג את הקישור או הנתיב. לכל צומת, מלבד צומת השורש, יהיה לפחות קישור נכנס אחד המכונה Edge. יהיה קישור אחד ליחסי הורה-ילד.עומק הצומת x:ניתן להגדיר את עומק הצומת x כאורך הנתיב מהשורש לצומת x. קצה אחד תורם אורך של יחידה אחת בנתיב. אז, ניתן להגדיר את עומק הצומת x גם כמספר הקצוות בין צומת השורש לצומת x. לצומת השורש יש 0 עומק.גובה הצומת x:ניתן להגדיר את גובה הצומת x כנתיב הארוך ביותר מהצומת x לצומת העלה.

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

יישום עץ

ניתן ליצור את מבנה נתוני העץ על ידי יצירת הצמתים באופן דינמי בעזרת המצביעים. ניתן לייצג את העץ בזיכרון כפי שמוצג להלן:

מחרוזת לתוך מערך java
עֵץ

האיור שלמעלה מציג את הייצוג של מבנה נתוני העץ בזיכרון. במבנה הנ'ל, הצומת מכיל שלושה שדות. השדה השני מאחסן את הנתונים; השדה הראשון מאחסן את הכתובת של הילד השמאלי, והשדה השלישי מאחסן את הכתובת של הילד הימני.

בתכנות, ניתן להגדיר את המבנה של צומת כך:

 struct node { int data; struct node *left; struct node *right; } 

ניתן להגדיר את המבנה לעיל רק עבור העצים הבינאריים מכיוון שלעץ הבינארי יכולים להיות שני ילדים לכל היותר, ולעצים גנריים יכולים להיות יותר משני ילדים. מבנה הצומת עבור עצים גנריים יהיה שונה בהשוואה לעץ הבינארי.

יישומים של עצים

להלן היישומים של עצים:

    אחסון נתונים היררכיים באופן טבעי:עצים משמשים לאחסון הנתונים במבנה ההיררכי. לדוגמה, מערכת הקבצים. מערכת הקבצים המאוחסנת בכונן הדיסקים, הקובץ והתיקיה הם בצורת הנתונים ההיררכיים באופן טבעי ומאוחסנים בצורה של עצים.ארגן נתונים:הוא משמש לארגון נתונים לצורך הכנסה, מחיקה וחיפוש יעילים. לדוגמה, לעץ בינארי יש זמן logN לחיפוש אלמנט.נסה:זהו סוג מיוחד של עץ המשמש לאחסון המילון. זוהי דרך מהירה ויעילה לבדיקת איות דינמית.ערימה:זהו גם מבנה נתוני עץ המיושם באמצעות מערכים. הוא משמש ליישום תורי עדיפות.B-Tree ו-B+Tree:B-Tree ו-B+Tree הם מבני נתוני העץ המשמשים ליישום אינדקס במסדי נתונים.טבלת ניתוב:מבנה נתוני העץ משמש גם לאחסון הנתונים בטבלאות ניתוב בנתבים.

סוגי מבנה נתוני עץ

להלן הסוגים של מבנה נתוני עץ:

    עץ כללי:העץ הכללי הוא אחד מסוגי מבנה נתוני העץ. בעץ הכללי, לצומת יכול להיות מספר 0 או מקסימום n של צמתים. לא מוטלת הגבלה על מידת הצומת (מספר הצמתים שצומת יכול להכיל). הצומת העליון בעץ כללי ידוע כצומת שורש. הילדים של צומת האב ידועים בשם תת עצי .
    עֵץ
    יכול להיות נ מספר תת-עצים בעץ כללי. בעץ הכללי, תתי העצים אינם מסודרים מכיוון שלא ניתן לסדר את הצמתים בתת העץ.
    לכל עץ לא ריק יש קצה כלפי מטה, והקצוות הללו מחוברים לצמתים המכונים צמתים של ילדים . צומת השורש מסומן ברמה 0. הצמתים שיש להם אותו הורה ידועים בשם אחים . עץ בינארי :כאן, השם הבינארי עצמו מציע שני מספרים, כלומר 0 ו-1. בעץ בינארי, לכל צומת בעץ יכולים להיות שני צמתים צאצאים לכל היותר. כאן, הכי פירושו אם לצומת יש 0 צמתים, צומת 1 או 2 צמתים.
    עֵץ
    כדי לדעת יותר על העץ הבינארי, לחץ על הקישור המופיע למטה:
    https://www.javatpoint.com/binary-tree עץ חיפוש בינארי :עץ חיפוש בינארי הוא מבנה נתונים לא ליניארי שאליו מחובר צומת אחד נ מספר צמתים. זהו מבנה נתונים מבוסס צמתים. צומת יכול להיות מיוצג בעץ חיפוש בינארי עם שלושה שדות, כלומר, חלק נתונים, ילד שמאלי וילד ימני. ניתן לחבר צומת לשני הצמתים הקטנים ביותר בעץ חיפוש בינארי, כך שהצומת מכיל שני מצביעים (ילד שמאלי ומצביע צאצא ימני).
    כל צומת בתת-עץ השמאלי חייב להכיל ערך הנמוך מערכו של צומת השורש, והערך של כל צומת בתת-העץ הימני חייב להיות גדול מהערך של צומת השורש.

ניתן ליצור צומת בעזרת סוג נתונים המוגדר על ידי המשתמש הידוע בשם מבנה, כפי שמוצג מטה:

 struct node { int data; struct node *left; struct node *right; } 

האמור לעיל הוא מבנה הצומת עם שלושה שדות: שדה נתונים, השדה השני הוא המצביע השמאלי של סוג הצומת, והשדה השלישי הוא המצביע הימני של סוג הצומת.

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

https://www.javatpoint.com/binary-search-tree

אוספים בג'אווה

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

אנו יכולים להתייחס לעץ כעץ AVL אם העץ מציית לעץ החיפוש הבינארי וכן לגורם מאזן. ניתן להגדיר את גורם האיזון כ- ההבדל בין גובה תת-העץ השמאלי לגובה תת-העץ הימני . הערך של גורם האיזון חייב להיות 0, -1 או 1; לכן, לכל צומת בעץ ה-AVL צריך להיות הערך של גורם האיזון כ-0, -1 או 1.

כדי לדעת יותר על עץ AVL, לחץ על הקישור המופיע למטה:

https://www.javatpoint.com/avl-tree

    עץ אדום-שחור

העץ האדום-שחור הוא עץ החיפוש הבינארי. התנאי המקדים של העץ האדום-שחור הוא שנדע על עץ החיפוש הבינארי. בעץ חיפוש בינארי, הערך של תת-העץ השמאלי צריך להיות קטן מהערך של אותו צומת, והערך של תת-העץ הימני צריך להיות גדול מהערך של אותו צומת. כפי שאנו יודעים שמורכבות הזמן של חיפוש בינארי במקרה הממוצע היא יומן2n, המקרה הטוב ביותר הוא O(1), והמקרה הגרוע ביותר הוא O(n).

כאשר מבצעים כל פעולה בעץ, אנו רוצים שהעץ שלנו יהיה מאוזן כך שכל הפעולות כמו חיפוש, הכנסת, מחיקה וכו', ייקח פחות זמן, ולכל הפעולות הללו תהיה מורכבות זמן של עֵץ2נ.

10 מ"ל לאונקים

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

    עץ ספייס

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

ייתכן שהגובה של עץ הספליי אינו מאוזן, כלומר, הגובה של תת-העץ השמאלי והימני עשוי להיות שונה, אך הפעולות ב-splay tree מקבלות סדר של לְהַרְגִיעַ זמן איפה נ הוא מספר הצמתים.

עץ ספליי הוא עץ מאוזן אך אינו יכול להיחשב כעץ מאוזן גובה כי לאחר כל פעולה מתבצע סיבוב שמוביל לעץ מאוזן.

git rebase
    טפש

מבנה הנתונים של Treap הגיע ממבנה הנתונים Tree and Heap. אז הוא כולל את המאפיינים של מבני נתונים של Tree וגם של Heap. בעץ החיפוש הבינארי, כל צומת בתת העץ השמאלי חייב להיות שווה או קטן מערכו של צומת השורש וכל צומת בתת העץ הימני חייב להיות שווה או גדול מערכו של צומת השורש. במבנה נתונים ערימה, תתי-עץ ימני ושמאלי גם יחד מכילים מפתחות גדולים יותר מהשורש; לכן, אנו יכולים לומר שצומת השורש מכיל את הערך הנמוך ביותר.

במבנה הנתונים של טרפ, לכל צומת יש את שניהם מַפְתֵחַ ו עדיפות כאשר המפתח נגזר מעץ החיפוש הבינארי והעדיפות נגזרת ממבנה הנתונים הערימה.

ה טפש מבנה הנתונים עוקב אחר שני מאפיינים המובאים להלן:

  • בן ימין של צומת>=צומת נוכחי וצאצא שמאלי של צומת<=current node (binary tree)< li>
  • ילדים של כל תת-עץ חייבים להיות גדולים מהצומת (ערימה)
    B-עץ

B-tree הוא מאוזן m-way עץ איפה M מגדיר את סדר העץ. עד עכשיו, קראנו שהצומת מכיל רק מפתח אחד אבל b-tree יכול להיות יותר ממפתח אחד, ויותר מ-2 ילדים. זה תמיד שומר על הנתונים הממוינים. בעץ בינארי, ייתכן שצמתים עלים יכולים להיות ברמות שונות, אבל ב-b-tree, כל צמתי העלים חייבים להיות באותה רמה.

אם הסדר הוא m, לצומת יש את המאפיינים הבאים:

  • לכל צומת בעץ b יכול להיות מקסימום M יְלָדִים
  • עבור ילדים מינימליים, לצומת עלה יש 0 ילדים, לצומת שורש יש מינימום 2 ילדים ולצומת פנימי יש תקרה מינימלית של m/2 ילדים. לדוגמה, הערך של m הוא 5 מה שאומר שלצומת יכולים להיות 5 ילדים וצמתים פנימיים יכולים להכיל מקסימום 3 ילדים.
  • לכל צומת יש מפתחות מקסימום (m-1).

צומת השורש חייב להכיל מפתח אחד לפחות וכל שאר הצמתים חייבים להכיל לפחות תקרה של m/2 מינוס 1 מפתחות.