מבני נתונים ואלגוריתמים - מחברת קורס/מבני נתונים/עצי חיפוש בינריים: הבדלים בין גרסאות בדף
תוכן שנמחק תוכן שנוסף
אין תקציר עריכה |
|||
שורה 275:
===פעולת הsplice===
נניח שלצומת אין בנים, או שלצומת יש רק בן יחיד. כדי להוציא את הצומת מהעץ, פשוט מחברים את אביו (אם יש לו כזה) עם בנו (אם יש לו כזה).
{{דוגמה|תוכן =
התרשים הבא מראה כיצד להוציא את הצומת בעל המפתח 7:
1 if nd == Nil▼
2 return▼
[[תמונה:dsa_binary_search_splice.png|מרכז|100%|splice בעץ חיפוש בינרי.]]}}
הפסוודו-קוד הבא מממש זאת. (רובו מטפל במקרי קצה מעצבנים, כגון המקרה שבו הצומת המוצא הוא השורש.)
התרשים הבא מראה את סדר המעבר בצומת:▼
[[תמונה:dsa_binary_search_tree_pre_order.png|מרכז|100%|מעבר pre-order.]] ▼
<source lang = "python">
# Splices (removes) a node (nd) from a tree (t).
# The node (nd) must not have two children.
1 if nd == Nil▼
Splice(t, nd)
1 child = nd.l_child == Nil ? nd.r-child : nd.l-child
2 parent = nd.parent
4 child.parent = parent
התרשים הבא מראה את סדר המעבר בצומת:▼
6 t.root = child
[[תמונה:dsa_binary_search_tree_post_order.png|מרכז|100%|מעבר post-order.]] ▼
8 if nd.key < parent.key
9 parent.l-child = child
10 else
11 parent.r-child = child
</source>
התרשים הבא מראה את סדר המעבר בצומת:▼
[[תמונה:dsa_binary_search_tree_in_order.png|מרכז|100%|מעבר in-order.]] ▼
בשיעורי הבית תתבקש להוכיח שצורת מעבר זו תדפיס את כל איברי העץ בסדר עולה.▼
===האלגוריתם===
שורה 395 ⟵ 354:
{{משפט|תוכן =
סיבוכיות הפעולה היא <math dir = "ltr">\displaystyle \Theta(h)</math> במקרה הגרוע, כאשר <math dir = "ltr">\displaystyle h</math> הוא גובה העץ.}}
==פעולות למעבר על כל איברי העץ==
לעתים רוצים לעבור על כל איברי העץ, אם כדי להדפיסם, ואם למטרה אחרת. נראה כעת שלוש שיטות (רקורסיביות) מקובלות למעבר על כל איברי העץ, ונשתמש בהדפסה כדוגמה. בשיעורי הבית תתבקש להראות שכל אחד מזמני הריצה של המעברים הוא לינארי במספר האיברים בעץ.
===מעבר Pre-Order===
שורה 418 ⟵ 378:
5 Pre-order(nd.r-child)
</source>
▲התרשים הבא מראה את סדר המעבר בצומת:
▲[[תמונה:dsa_binary_search_tree_pre_order.png|מרכז|100%|מעבר pre-order.]]
===מעבר Post-Order===
שורה 437 ⟵ 402:
3 Print(nd.value)
</source>
▲התרשים הבא מראה את סדר המעבר בצומת:
▲[[תמונה:dsa_binary_search_tree_post_order.png|מרכז|100%|מעבר post-order.]]
===מעבר In-Order===
שורה 457 ⟵ 427:
5 In-order(nd.r-child)
</source>
▲התרשים הבא מראה את סדר המעבר בצומת:
▲[[תמונה:dsa_binary_search_tree_in_order.png|מרכז|100%|מעבר in-order.]]
▲בשיעורי הבית תתבקש להוכיח שצורת מעבר זו תדפיס את כל איברי העץ בסדר עולה.
==סיכום==
בפרק זה ראינו מבנה לניהול נתונים בעל צורה כשל עץ.
*אם <math dir = "ltr">\displaystyle h</math> ו<math dir = "ltr">\displaystyle n</math> באותו סדר גודל, הרי שקיבלנו מבנה נתונים שאינו יעיל משמעותית מ[[מבני נתונים ואלגוריתמים - מחברת קורס/מבני נתונים/רשימות מקושרות|רשימה מקושרת]].
*אם נוכל לנהל את המבנה כך ש<math dir = "ltr">\displaystyle h</math> יהיה קטן יחסית ל<math dir = "ltr">\displaystyle n</math>, נקבל מבנה נתונים יעיל. הפרק [[מבני נתונים ואלגוריתמים - מחברת קורס/מבני נתונים/עצים אדומים-שחורים|עצים אדומים-שחורים]] עוסק בכך.
|