עצים בינארים
Transcription
עצים בינארים
עיצוב תכנה 1 עצים בינאריים עצים בינאריים BinTreeNode - עץ - מבנה נתונים (גרף) המורכב מצמתים המקיימים ביניהם יחס של הורה ובנים /צאצאים. צומת -חוליה ולה תכונות - info :הפניה לטיפוס המידע ,והפניות לצמתים אחרים. קשת -הפניה היוצאת מצומת אב לצומת בן. כל עץ מורכב מצומת שורש ) (rootשהוא הצומת הראשון בעץ. לכל צומת פרט לשורש יש הורה /אב ).(perent כל צומת יכול להיות הורה לצמתים רבים אחרים, וכל הצמתים הללו הם בניו של ההורה. כל הצמתים שהם בניו של אותו הורה הם צמתים אחים. כל צומת בעץ הוא צאצא ) (descendentשל כל הצמתים שמעליו. כל צומת הוא אב קדמון של כל צאצאיו. מספר בניו של הצומת קובעים את דרגתו -דרגת צומת ).(degree לצומת שלו 3בנים נקבעת דרגה 3ואילו לצומת שאין לו בנים כלל נקבעת דרגה .0 צומת שדרגתו 0קרוי עלה ).(leaf עץ בינארי ) - (BinTreeNodeעץ שבו הדרגה המקסימאלית של כל אחד מצמתיו הוא .2כלומר -לכל צומת יש שתי הפניות leftו right -לשני בנים מסלול -רצף של צמתים/קשתות היוצאות מצומת אחת עד צומת שני. רמת עץ ) ,(tree levelזוהי השכבה בה מצוי הצומת הרחוק ביותר מהשורש .השורש בעץ מסומן כרמה ,0בניו של השורש נמצאים ברמה מספר ,1בני בניו ברמה 2וכך הלאה. רמה של צומת הינה מספר הקשתות שיש לעבור כדי להגיע משורש העץ עד הצומת המבוקש. גובה עץ או עומק העץ הוא מספרה של הרמה הגבוהה ביותר בעץ. מספר הקשתות לאורכו של המסלול הארוך ביותר היוצא מן השורש ומסתיים בעלה. תת-עץ-שמאלי -עץ בינארי ששורשו הוא הבן השמאלי של צומת נתון. תת-עץ-ימני -עץ בינארי ששורשו הוא הבן הימני של צומת נתון. בן הוא תמיד שורש של תת-עץ ).(sub-tree רמה מלאה -רמה בעץ שקיימים בה כל הצמתים. עץ בינארי מלא (עץ שלם) -עץ שכל רמה בו היא רמה-מלאה. עץ בינארי לחלוטין -עץ שדרגת כל צומת בו היא 0או 2 (כלומר -אין צומת שלו בן יחיד). www.kadman.net הילה קדמן עיצוב תכנה 2 עצים בינאריים דוגמאות לעצים שאינם עצים בינאריים: www.kadman.net הילה קדמן עיצוב תכנה תרגיל: 3 אלו מהמשפטים הבאים נכון לגבי העץ שלהלן: א. Aהוא אב קדמון של כל צמתי העץ----------------------------------------- . ב. Bהוא אב קדמון של ------------------------------------------------------ .G ג. Fהוא צאצא של E ,Cו---------------------------------------------------.G- ד. Dהוא ברמה --------------------------------------------------------------- .2 ה. Gהוא אח של ------------------------------------------------------------- .B ו. Cהוא אב קדמון של Fו-------------------------------------------------- .D- ז. רמתם של אחים בעץ זהה---------------------------------------------------- . תרגיל: עצים בינאריים כמה אבות קדמונים יש לצומת ברמה nבעץ בינארי ? www.kadman.net הילה קדמן עיצוב תכנה www.kadman.net 4 עצים בינאריים הילה קדמן עצים בינאריים עיצוב תכנה 5 :תרגיל :עקוב אחרי קטע הקוד וצייר את העץ המתקבל Java BinTreeNode<Integer> bt = new BinTreeNode<Integer>(7); BinTreeNode<Integer> t1 = new BinTreeNode<Integer>(5); BinTreeNode<Integer> t2 = new BinTreeNode<Integer>(2); bt.setLeft(t1); bt.setRight(t2); t1.setRight (new BinTreeNode<Integer>(new BinTreeNode<Integer>(4), 1, null)); t2.setLeft(new BinTreeNode<Integer>(null, 8, new BinTreeNode<Integer>(12))); t1 = t1.getRight(); t1.setRight(new BinTreeNode<Integer> (15)); t2.setRight(new BinTreeNode<Integer>(new BinTreeNode<Integer>(-4), 9, new BinTreeNode<Integer>(72))); הילה קדמן www.kadman.net עצים בינאריים עיצוב תכנה 6 :תרגיל :עקוב אחרי קטע הקוד וצייר את העץ המתקבל C# BinTreeNode<int> bt = new BinTreeNode<int>(7); BinTreeNode<int> t1 = new BinTreeNode<int>(5); BinTreeNode<int> t2 = new BinTreeNode<int>(2); bt.SetLeft(t1); bt.SetRight(t2); t1.SetRight (new BinTreeNode<int> (new BinTreeNode<int> (4), 1, null)); t2.SetLeft (new BinTreeNode<int> (null, 8, new BinTreeNode<int> (12))); t1 = t1.GetRight(); t1.SetRight (new BinTreeNode<int> (15)); t2.SetRight (new BinTreeNode<int> (new BinTreeNode<int> (-4), 9, new BinTreeNode<int> (72))); הילה קדמן www.kadman.net עיצוב תכנה 7 עצים בינאריים סריקת עץ בינארי: סריקה בסדר תחילי pre order - 1. .2 .3 בקר בשורש. סרוק תת-עץ השמאלי בסדר תחילי. סרוק תת-עץ ימני בסדר תחילי. סריקה בסדר תוכי 1. 2. .3 in order - סרוק תת-עץ השמאלי בסדר תוכי. בקר בשורש. סרוק תת-עץ ימני בסדר תוכי. סריקה בסדר סופי post order - 1. 2. .3 סרוק תת-עץ השמאלי בסדר סופי. סרוק תת-עץ ימני בסדר סופי. בקר בשורש. שלושת שיטות הסריקה מעידים על מיקומה של פעולת הביקור בשורש בין 3הפעולות. קיימת שיטת סריקה נוספת -סריקה לפי רמות. שחזור עץ בינארי על פי 2מסריקותיו. www.kadman.net הילה קדמן עיצוב תכנה 8 סריקת העץ בשיטות השונות: ABDEGJCFHKI סריקה בסדר תחילי: DBJGEACHKFI סריקה בסדר תוכי: DJGEBKHIFCA סריקה בסדר סופי: PreOrder InOrder PostOrder תרגיל: עצים בינאריים מהו סדר הביקור בצמתים בכל אחת משלוש שיטות הסריקה? www.kadman.net הילה קדמן עיצוב תכנה 9 עצים בינאריים אוסף פעולות רקורסיביות: מספר הצמתים בעץ סכום הצמתים בעץ עלה? מספר העלים בעץ סכום העלים מספר הצמתים שערכם x מספר בנים ימניים בעץ מספר צמתים זוגיים מספר הבנים של צומת נתון מספר הנכדים של צומת נתון עץ פרו ורבו ( - )2004מחזיר אמת אם קיים צומת ולו לפחות שני נכדים משני הבנים. מספר-סבים בעץ האם-נמצא? )(bt, x האם כל הצמתים אי-זוגיים? בגרות 2004עץ פרו ורבו ממוין-רמות? -אמת אם ערך כל אב קטן מערך בניו ,ושקר אחרת עץ-ממוצע? -אמת אם ערך כל צומת שווה לממוצע הערכים של בניו. גובה-עץ ערך מקסימאלי בעץ האם-אחים? )(bt1, bt2 האם-הורה? ()bt1, bt2 בגרות 2000סבא רבא מחזיר הפניה לצומת ההורה של הצומת .הצוןמת אינו שורש העץמצא-הורה (צומת) האם קיים מסלול שערכי כל צמתיו זהה.מסלול-אחיד עץ-מלא? -כל הרמות מלאות (הקשר שבין מספר הצמתים Nוגובה העץ )2^k == n :K עץ בינארי לחלוטין (עץ מלא) -עץ שדרגת כל צומת בו היא 0או 2 www.kadman.net הילה קדמן עיצוב תכנה www.kadman.net 10 עצים בינאריים הילה קדמן