140 likes | 626 Views
1. 2. 3. 4. 5. 6. 1. 1. עץ בינארי שלם (complete) עץ בינארי מלא שבו כל העלים באותו עומק. עץ בינארי מלא (full) לכל צומת פנימי 2 בנים. 2. 3. 2. 3. 6. 7. 4. 5. 4. 5. 6. 7. עצים בינאריים - תזכורת. דרגת צומת שורש עלה צומת פנימי מרחק בין 2 צמתים גובה של צומת (עץ)
E N D
1 2 3 4 5 6 1 1 עץ בינארי שלם (complete) עץ בינארי מלא שבו כל העלים באותו עומק עץ בינארי מלא (full) לכל צומת פנימי 2 בנים 2 3 2 3 6 7 4 5 4 5 6 7 עצים בינאריים - תזכורת דרגת צומת שורש עלה צומת פנימי מרחק בין 2 צמתים גובה של צומת (עץ) עומק של צומת amirrub@cs - אמיר רובינשטיין
עצים בינאריים – מימוש ע"י רשימות מקושרות • בעלים - שדות המצביעים יכילו NULL. • ניתן להחזיק בכל צומת גם מצביע לאב. amirrub@cs - אמיר רובינשטיין
סיורים בעצים הדגמה:http://nova.umuc.edu/~jarc/idsv/ amirrub@cs - אמיר רובינשטיין
הסיבוכיות בשני המימושים: זמן- O(n) ( אם do_something דורשת O(1) ) מקום- )גובה העץO(. amirrub@cs - אמיר רובינשטיין
תרגיל 1 סטודנט הפעיל סיורים inorder ו- postorder על עץ שהיה ברשותו. כעבור זמן מה, הוא גילה שאיבד את העץ, אך יש עדיין בידו את תוצאות הסיורים. עזרו לסטודנט לשחזר את העץ. האם תמיד הדבר אפשרי? inorder : 2 6 4 7 1 3 8 5 9 10 preorder : 1 2 4 6 7 3 5 8 9 10 amirrub@cs - אמיר רובינשטיין
תרגיל 2 • נתון עץ בינארי, שבכל צומת בו יש מצביעים גם להורים. • כיצד ניתן לממש סיור בעץ בסיבוכיות מקום נוסף O(1)? • פתרון • נחזיק שני מצביעים: current ו- last, שיצביעו בכל רגע לצומת הנוכחי בו אנו נמצאים, ולצומת הקודם בו היינו, בהתאמה. • סיור inorder לדוגמא, יתבצע בדומה לקוד (הלא רקורסיבי) שהוצג קודם, אבל ללא שימוש מחסנית. • בכל פעם שנעלה להורה v, נבדוק האם עלינו אליו משמאל או מימין: • - אם עלינו משמאל, נבקר ב- v, ונמשיך בסיור לתת העץ הימני של v. • - אם עלינו מימין, סיימנו לבקר בתת העץ ש- v הוא שורשו, לכן נעלה לאב של v. amirrub@cs - אמיר רובינשטיין
המסלול הכבד ביותר בעץ • נתון עץ בעל n צמתים, לכל צומת יש מפתח, ושני מצביעים לבנים. מותר להוסיף שדות נוספים לצמתים לצורך הפתרון. • הציעו אלגוריתם לחישוב ערכו של המסלול הכבד ביותר משורש לעלה כלשהו(המסלול שסכום המפתחות של צמתיו הוא מקסימלי). על האלגוריתם להדפיס מסלול זה. • סיבוכיות דרושה – O(n). Key • דוגמאות לשימוש בסיורים ע"מ לחשב תכונות של עץ בינארי • חישוב מספר הצמתים בעץ בינארי int count (node *p) { if (!p) return 0; return (1 + count (p left) + count (p right)); } amirrub@cs - אמיר רובינשטיין
עץ עץ בינארי עץ חיפוש עץ מאוזן עץ טרנארי AVL 2-3 עצי חיפוש - מימוש למבנה הנתונים "מילון" amirrub@cs - אמיר רובינשטיין
פעולות על עץ חיפוש בינארי T: Find(T,x) Insert(T,x) Delete(T,x) פעולות אלה צריכות לשמור על התכונה שלעיל ! עצי חיפוש בינאריים עץ חיפוש בינארי הינו עץ בינארי עם התכונה הבאה: בהינתן צומת עם מפתח X, כל הצמתים עם מפתחות גדולים יותר נמצאים בתת העץ הימני, וכל הצמתים עם מפתחות קטנים יותר נמצאים בתת העץ השמאלי. הדגמה:http://nova.umuc.edu/~jarc/idsv/ סיבוכיות כל הפעולות הנ"ל: )גובה העץO( מקרה גרוע: O(n) מקרה טוב: O(logn) מקרה ממוצע: O(logn) amirrub@cs - אמיר רובינשטיין