מבני נתונים ואלגוריתמים - מחברת קורס/מבני נתונים/עצי חיפוש בינריים: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Atavory (שיחה | תרומות)
Atavory (שיחה | תרומות)
שורה 279:
 
 
כעת, לאחר שאנו יודעים כיצד לבצע splice, נוכל למצוא אלגוריתם למחיקת איבר. ראינו כבר שהמקרה שבו יש לצומת בן אחד (או פחות), קל
לפתירה על ידי splice. אם יש לצומת שני בנים, אז בהכרח יש לו בן ימני.
למחיקת איבר. ראינו כבר שהמקרה שבו יש לצומת בן אחד (או פחות), קל
לפתירה על ידי splice. אם יש לצומת שני בנים, אז בהכרח יש לו בן
ימני.
 
 
{{משפט|תוכן =
אם לצומת יש בן ימני, אז לצאצא השמאלי ביותר של בנו הימני אין בן שמאלי.}}
אין בן שמאלי.}}
 
 
כלומר, יוצא שתמיד נוכל להשתמש בפעולת splice:
#אם לצומת רק בן אחד (או פחות), אז אפשר לבצע עליו splice.
#אם לצומת יש שני בנים, אז לבנו הימני יש צאצא שלו לכל היותר בן אחד. נוכל לבצע splice על אותו הצאצא, לכן.
 
#אם לצומת רק בן אחד (או פחות), אז אפשר לבצע עליו
splice.
 
#אם לצומת יש שני בנים, אז לבנו הימני יש צאצא שלו לכל היותר
בן אחד. נוכל לבצע splice על אותו הצאצא, לכן.
<source lang = "python">
# Erases a node (nd) from a tree (t).
Erase(t, nd)
1 --t.size
 
2 if nd.l-child == Nil or nd.r-child == Nil
3 Splice(t, nd)
4 return
5 spliced = Min(nd.r-child)
 
6 Splice(t, spliced)
 
7 nd.key = spliced.key</source>
 
 
שורה 318 ⟵ 312:
 
 
[[תמונה:dsa_binary_search_delete.png|מרכז|100%|מחיקת צומת מעץ חיפוש בינרי.]]}}
 
 
 
{{משפט|תוכן =
סיבוכיות הפעולה היא <math dir = "ltr">\displaystyle \Theta(h)</math> במקרה הגרוע, כאשר <math dir = "ltr">\displaystyle h</math> הוא גובה העץ (מרחק המקסימום מהשורש לעלה כלשהו).}}
כלשהו).}}