Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad...
Transcript of Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad...
![Page 1: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/1.jpg)
Otsimispuud on ühed paljudest andmestruktuuridest, mis� on mõeldud mingi kirjete hulga hoidmiseks;� Kirjed peavad sisaldama võtit, suvalised kaks võtitpeavad võrreldavad olema.� toetab järgmisi operatsioone� (otsimispuu loomine,)� kirje lisamine puusse,� kirje otsimine puust võtme järgi,� kirje kustutamine puust.Otsimispuid on mitut sorti, erinevates puudes on operat-sioonide keerukused erinevad.Keerukused pole üldiselt paremad kui �(logn), kus n onkirjete arv puus.
![Page 2: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/2.jpg)
(Juurega) puu T on üks järgmistest variantidest:� tühi puu;� tipp x ja mittetühjad juurega puud T1; : : : ; Tm, kusm > 0.
![Page 3: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/3.jpg)
xT1 T2 T3 T4
![Page 4: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/4.jpg)
ülemusalluvad
eellased
järglasedlehed
sisemised tipud
kolleegid
![Page 5: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/5.jpg)
Kahendpuu T on üks järgmistest variantidest:� tühi puu;� üksainus tipp x;� tipp x ning kahendpuud Tvasak ja Tparem.Kahendpuu ei ole samaväärne puuga � kui kahendpuumingil tipul on ainult üks alluv, siis on ta kas vasak võiparem alluv. Puu tipu ainsa alluva korral vasak/parem-erisust ei ole.
![Page 6: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/6.jpg)
Lause. Mittetühjas kahendpuus, kus ühegi tipu aste ei ole1, on lehti ühe võrra rohkem kui sisemisi tippe.
Tõestus. Induktsiooniga üle kahendpuu struktuuri.Ühetipulises puus olev ainus tipp on leht.Kui puus T on juurtipp x ja selle alluvatest koosnevadmittetühjad kahendpuud Tv ja Tp, siis olgu lv ja lp lehtedearvud nendes. Puus T on siis lehti lv + lp ja sisemisi tippelv � 1 + lp � 1+ (puudes Tv ja Tp vastavalt induktsioonile)+ 1 = (tipp x)= lv + lp � 1 :
![Page 7: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/7.jpg)
Kahendpuud võime arvuti põhimälus kujutada struktuu-rina, kus igale tipule vastab kirjeAndmed:vasak :parem
kus väli :vasak viitab vasakule ning :parem paremale al-luvale.Teatavad algoritmid võivad nõuda täiendavate väljade ole-masolu kas osa �Andmed� sees või väljaspool seda.(kahendpuu naturaalesitus)
![Page 8: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/8.jpg)
Puud võime arvuti põhimälus kujutada struktuurina, kusigale tipule vastab kirjeAndmed:alluv :kolleeg
kus väli :alluv viitab vasakpoolseimale alluvale ning :kolleegparemalt järgmisele kolleegile.(puu naturaalesitus)
![Page 9: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/9.jpg)
viidad: alluv / kolleegpuuduvad viidad � NIL
Kui loeme alluv�vasak jakolleeg�parem, siis saamepuu naturaalesitusele vas-tava kahendpuu.
![Page 10: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/10.jpg)
Olgu meil antud mingi protseduur P , mida me puu igaltipul rakendada tahame.Mis järjekorras rakendada?Järjestust, kus kõigepealt on puu juur ja seejärel samalviisil järjestatult juure vahetute alampuude tipud, nimeta-takse eesjärjestuseks .Järjestust, kus kõigepealt on samal viisil järjestatult juurevahetute alampuude tipud ja lõpuks puu juur, nimetatakselõppjärjestuseks .
![Page 11: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/11.jpg)
2221
184
36
517
87 14
9 1210 1113
1615
212019
L~oppjärjestus123
45
67
89
1011 12
13 1415 1617
1819
212220
Eesjärjestus
![Page 12: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/12.jpg)
Kahendpuu tippude järjestust, kus kõigepealt on samal vii-sil järjestatult juure vasaku vahetu alampuu tipud, seejärelpuu juur ja lõpuks samal viisil järjestatult juure vahetu pa-rema alampuu tipud, nimetatakse keskjärjestuseks .
![Page 13: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/13.jpg)
12
34
56
78
910
1112
13
![Page 14: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/14.jpg)
Kahendotsimise puu on kahendpuu, kus igal tipul on täien-dav väli :v~oti (kuulub ossa �Andmed�), mille väärtustel onde�neeritud täielik järjestus, ning kui puu ei ole tühi, siis� juure välja :v~oti väärtus pole väiksem kui tema vasakualampuu mistahes tipu välja :v~oti väärtus;� juure välja :v~oti väärtus pole suurem kui tema paremaalampuu mistahes tipu välja :v~oti väärtus;� juure vasak ja parem alampuu on mõlemad kahendot-simise puud.
![Page 15: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/15.jpg)
710
1216
2025
3237
4043
5056
62
![Page 16: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/16.jpg)
Lause. Võttes kahendotsimise puu tipud keskjärjestuses,on nende väljade :v~oti väärtused mittekahanevas järjekor-ras.
Tõestus. Induktsiooniga üle puu struktuuri. (vt. Kiho kons-pektist)
![Page 17: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/17.jpg)
Kahendotsimise puust etteantud võtmeväärtusega tipu ot-simine. Olgu p viit puu juurtipule ning a otsitav võtme-väärtus. Kui tippu ei leita, siis tagastatakse NIL.Algoritm: otsi(p; a), kus otsi(p; x) on1 if p = NIL then2 return NIL3 if p:v~oti = x then4 return p5 if x < p:v~oti then6 return otsi(p:vasak; x)7 else --- x > p:v~oti8 return otsi(p:parem; x)
![Page 18: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/18.jpg)
Otsimisteed, kui otsitavaks võtmeks on 15, 40 või 52.
710
1216
2025
3237
4043
5056
62
![Page 19: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/19.jpg)
Uue kirje (samade väljadega kui osas �Andmed�) lisaminekahendotsimise puusse. Olgu p viit puu juurtipule ja Rlisatav kirje. Tagastatakse lisatud tipp.Algoritm: lisa(p;R), kus lisa(p;R) on1 if R:x < p:x then2 if p:vasak = NIL then3 q := new(tipukirje); q:Andmed := R; p:vasak := q4 return q5 else6 return lisa(p:vasak;R)7 else8 if p:parem = NIL then9 q := new(tipukirje); q:Andmed := R; p:parem := q10 return q11 else12 return lisa(p:parem;R)
![Page 20: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/20.jpg)
Tipu võtmeväärtusega 15 lisamine kahendotsimise puusse.
15
710
1216
2025
3237
4043
5056
62
![Page 21: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/21.jpg)
Tipu eemaldamine kahendotsimise puust.Olgu tippudel väli :�ulem (ei kuulu ossa �Andmed�), misviitab käesoleva tipu ülemusele.Lisamisalgoritmis tuleb siis uue tipu väli :�ulem ka initsia-liseerida, s.t. 3. ja 9. rida tuleb täiendada omistamisegaq:�ulem := p.Olgu p viit vaadeldava kahendpuu juurtipule ja q viit eemal-datavale tipule. Algoritm eemalda(p; q) kustutab puust kir-je q:Andmed. Ta tagastab väärtuste paari: viida muudetudpuu juurtipule ning viida tegelikult eemaldatud tipule.
![Page 22: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/22.jpg)
Kui tipul q pole alluvaid, siis lihtsalt kustutame ta.
15
710
1216
2025
3237
4043
5056
62
![Page 23: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/23.jpg)
eemalda(p; q) on1 if q:vasak = NIL and q:parem = NIL then2 if q:�ulem = NIL3 return (NIL; q)4 else if q:�ulem:vasak = q5 q:�ulem:vasak := NIL6 else7 q:�ulem:parem := NIL8 return (p; q). . .
![Page 24: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/24.jpg)
Kui tipul q on üks alluv, siis paneme q ülemuse viitamasellele alluvale.
15
710
1216
2025
3237
4043
5056
62
![Page 25: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/25.jpg)
9 else if �q:vasak = NIL and q:parem 6= NIL�or �q:vasak 6= NIL and q:parem = NIL� then10 r := q:vasak = NIL ? q:parem : q:vasak11 if q:�ulem = NIL12 return (r; q)13 else if q:�ulem:vasak = q14 q:�ulem:vasak := r15 else16 q:�ulem:parem := r17 return (p; q). . .
![Page 26: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/26.jpg)
Kui tipul q on mõlemad alluvad, siis leiame q-st keskjär-jestuses järgmise tipu r, kopeerime tema andmed tippu qja kustutame hoopis r-i.15
710
1216
2025
3237
4043
5056
62
Keskjärjestuses järgmine tipp: parempoolse alampuu va-sakpoolseim tipp.
![Page 27: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/27.jpg)
18 else19 r := q:parem20 while r:vasak 6= NIL do21 r := r:vasak22 q:Andmed := r:Andmed23 return eemalda(p; r).
![Page 28: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/28.jpg)
Kahendotsimise puu operatsioonide ajaline keerukus on�(h), kus h on puu kõrgus.Puus kõrgusega h on vähemalt h ja ülimalt 2h � 1 tippu.Seega on kahendpuu operatsioonide ajaline keerukus hal-vimal juhul O(n), kus n on tippude arv.Tahaksime keerukust O(logn). Selleks tuleb puud pealemuutmist tasakaalustada.
![Page 29: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/29.jpg)
AVL-puu on kahendotsimise puu, kus iga tipu vasaku japarema alampuu kõrgus erineb ülimalt ühe võrra.Lühend �AVL� tuleb autorite nimedest.Olgu Ah minimaalne tippude arv AVL-puus kõrgusega h.Siis A1 = 1, A2 = 2 ja Ah = Ah�1 + Ah�2 + 1.Fibona i arvud: F0 = 0, F1 = 1, Fh = Fh�1 + Fh�2. SeegaAh = Fh+2 � 1. (tõestus induktsiooniga üle h)
Kuna Fh = 24 1p5 1 +p52 !h35, kus [�℄ tähistab ümarda-
mist täisarvuni, siis Ah = 2�(h) ja AVL-puu kõrgus on alati�(logn), kus n on tippude arv.
![Page 30: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/30.jpg)
AVL-puus on tippudel täiendav väli :k~orgus (ei kuulu ossa�Andmed�), kuhu salvestatakse sellest tipust algava alam-puu kõrgus.Peale tipu lisamist või eemaldamist tuleb nende väljadeväärtusi parandada.Peale lisamist võivad valed kõrgused olla tippudel, mis asu-vad ahelal lisatud tipust juureni.Peale eemaldamist võivad valed kõrgused olla tippudel, misasuvad ahelal eemaldatud tipu (endisest) ülemusest juure-ni.Kõrguste parandamine toimub samaaegselt puu tasakaa-lustamisega.
![Page 31: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/31.jpg)
Tasakaalustamisoperatsioonid: pööre_vasakule ja pööre_paremale.pööre_paremale(p; x), kus p on viit puu juurtipule ja xviit mingile tipule, mille korral x:vasak 6= NIL, muudabalampuud, mille juureks on x, järgmiselt:xy
yx
T1 T2 T3 T1 T2 T3pööre_paremale tagastab muudetud puu juurtipu.
![Page 32: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/32.jpg)
pööre_paremale(p; x) on1 y := x:vasak; u := x:�ulem2 T1 := y:vasak; T2 := y:parem; T3 := x:parem3 y:vasak := T1; y:parem := x; x:vasak := T2; x:parem := T34 if u = NIL then5 return y6 else7 �u:vasak = x ? u:vasak : u:parem� := y8 return p
![Page 33: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/33.jpg)
pööre_vasakule on vastupidine operatsioon.
xy
T1 T2 T3
yT1 T2 T3
x
pööre_vasakule tagastab muudetud puu juurtipu.
![Page 34: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/34.jpg)
pööre_vasakule(p; x) on1 y := x:parem; u := x:�ulem2 T1 := x:vasak; T2 := y:vasak; T3 := y:parem3 y:vasak := x; y:parem := T3; x:vasak := T1; x:parem := T24 if u = NIL then5 return y6 else7 �u:vasak = x ? u:vasak : u:parem� := y8 return p
![Page 35: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/35.jpg)
Tipu lisamisel AVL-puusse teeme kõigepealt tavalise lisa-mise ja hakkame lisatud tipust alates kõrgusi parandama,kuni jõuame tasakaalustamata tipuni. . .lisaAVL(p;R), mis tagastab paari uuest puu juurest ja li-satud tipust, on1 q := lisa(p;R)2 r := q3 while r 6= NIL do4 hv := r:vasak = NIL ? 0 : r:vasak:k~orgus5 hp := r:parem = NIL ? 0 : r:parem:k~orgus6 if jhv � hpj = 2 then break7 r:k~orgus := max(hv; hp) + 18 r := r:�ulem9 if r = NIL then return (p; q). . .
![Page 36: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/36.jpg)
r viitab tasakaalustamata tipule. Vaatame juhtu, kus temaparempoolne alampuu on kõrgem kui vasakpoolne (teist-pidine juht on sümmeetriline).sh h+ 2r r-i kõrgus: h+ 3(enne lisamist: h+ 2)
10 if hp > hv then11 s := r:parem. . .
![Page 37: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/37.jpg)
Uus tipp lisati paremasse alampuusse. Kui s-i vasak ja pa-rem alampuu oleks peale lisamist võrdse kõrgusega, siisoleks üks alampuudest juba enne lisamist selle kõrgusegaolnud ja s-i kõrgus poleks muutunud. Seega oleks r jubaenne lisamist tasakaalustamata olnud. Järelikult on kaksvarianti:h h h+ 1
sr1. variant
h h+ 1 hsr
2. variant12 hsv := s:vasak = NIL ? 0 : s:vasak:k~orgus13 hsp := s:parem = NIL ? 0 : s:parem:k~orgus. . .
![Page 38: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/38.jpg)
1. variandil pöörame r-i vasakule.
h h+ 1h hh h+ 1
sr r s
Kogu vaadeldava alampuu kõrgus on nüüd h + 2 � sa-ma, mis enne uue tipu lisamist. Kõrgemalasuvate tippudekõrgused seega ei muutunud � puu on tasakaalus.
![Page 39: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/39.jpg)
2. variandil pöörame s-i paremalehhh h h h
sh� 1
r rh� 1
s
saame 1. variandi (s.t. pöörame r-i vasakule).hh h
rh� 1
s
![Page 40: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/40.jpg)
14 if hsv > hsp then15 p := pööra_paremale(p; s); s:k~orgus := hv + 116 p := pööra_vasakule(p; r)17 r:k~orgus := hv + 1; r:�ulem:k~orgus := hv + 218 return (p; q)19 else --- hv > hp20 s := r:vasak21 hsv := s:vasak = NIL ? 0 : s:vasak:k~orgus22 hsp := s:parem = NIL ? 0 : s:parem:k~orgus23 if hsv < hsp then24 p := pööra_vasakule(p; s); s:k~orgus := hp + 125 p := pööra_paremale(p; r)26 r:k~orgus := hp + 1; r:�ulem:k~orgus := hp + 227 return (p; q)
![Page 41: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/41.jpg)
Tipu eemaldamisel AVL-puust teeme kõigepealt tavaliseeemaldamise, seejärel teeme tasakaalustamisi teel eemal-datud tipust juureni.eemaldaAVL(p; q) on1 (p; q) := eemalda(p; q)2 r := q:�ulem3 while r 6= NIL do4 hv := r:vasak = NIL ? 0 : r:vasak:k~orgus5 hp := r:parem = NIL ? 0 : r:parem:k~orgus6 if jhv � hpj = 2 then break7 r:k~orgus := max(hv; hp) + 18 r := r:�ulem9 if r = NIL then return (p; q). . .
![Page 42: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/42.jpg)
r viitab tasakaalustamata tipule. Vaatame juhtu, kus temaparempoolne alampuu on kõrgem kui vasakpoolne (teist-pidine juht on sümmeetriline).sh h+ 2r r-i kõrgus: h+ 3(enne eemaldamist: h+ 3)
10 if hp > hv then11 s := r:parem. . .
![Page 43: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/43.jpg)
Tipp eemaldati vasakust alampuust. Kolm varianti:
h h h+ 1sr
1. variant
h h+ 1 hsr
2. variant
h h+ 1sr
3. variant12 hsv := s:vasak = NIL ? 0 : s:vasak:k~orgus13 hsp := s:parem = NIL ? 0 : s:parem:k~orgus. . .
![Page 44: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/44.jpg)
1. variandil pöörame r-i vasakule.
h h+ 1h hh h+ 1
sr r s
Kogu vaadeldava alampuu kõrgus on nüüd h+2� vähenesühe võrra. Seega peame me jätkame juure pool asuvatetippude tasakaalustamisi.
![Page 45: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/45.jpg)
2. variandil pöörame s-i paremalehhh h h h
sh� 1
r rh� 1
s
saame 1. variandi (s.t. pöörame r-i vasakule).hh h
rh� 1
s
![Page 46: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/46.jpg)
3. variandil pöörame r-i vasakule.
h h h+ 1h+ 1 h+ 1
sr r s
Kogu vaadeldava alampuu kõrgus on nüüd h+ 3 � sama,mis enne eemaldamist. Seega on nüüd juurepoolsed tipudtasakaalus.
![Page 47: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/47.jpg)
14 if hsv = hsp then15 p := pööra_vasakule(p; r)16 r:k~orgus := hv + 2; s:k~orgus := hv + 317 return (p; q)18 if hsv > hsp then19 p := pööra_paremale(p; s); s:k~orgus := hv + 120 p := pööra_vasakule(p; r)21 r:k~orgus := hv + 1; r:�ulem:k~orgus := hv + 222 r := r:�ulem:�ulem; goto 3. . .
![Page 48: Otsimispuud - utkodu.ut.ee/~peeter_l/teaching/a_ja_a06s/loeng2a.pdf · atest k o osnev ad mittetühjad k ahendpuud T v ja p, siis olgu l leh tede arvud nendes. Puus T on siis leh](https://reader034.fdocuments.net/reader034/viewer/2022050416/5f8bf62d9c3485127a2e16f7/html5/thumbnails/48.jpg)
23 else --- hv > hp24 s := r:vasak25 hsv := s:vasak = NIL ? 0 : s:vasak:k~orgus26 hsp := s:parem = NIL ? 0 : s:parem:k~orgus27 if hsv = hsp then28 p := pööra_paremale(p; r)29 r:k~orgus := hp + 2; s:k~orgus := hp + 330 return (p; q)31 if hsv < hsp then32 p := pööra_vasakule(p; s); s:k~orgus := hp + 133 p := pööra_paremale(p; r)34 r:k~orgus := hp + 1; r:�ulem:k~orgus := hp + 235 r := r:�ulem:�ulem; goto 3