Generelle trær: Trær Består av sammenkoblede noder Hver node har 0 eller flere barne-noder. Må være asyklisk. Et tre med n noder har n-1 kanter. løvnoder kant rotnode sub-tre 1
Generelle trær: Oppbygging Variant 1: Noden har kjenskap til: Foreldrenoden Alle barnenodene. Variant 2: Noden har kjenskap til: Foreldrenoden Venstre barnenode. Nærmeste søsken. (kjennskap er markert med rødt) 2
Generelle trær: Traversering Inorder: Venstre subtre behandles før rotnoden. Deretter høyre subtre. Preorder: Rotnoden behandles først. Deretter de to subtrærne. Postorder: De to subtrærne behandles først. Deretter behandles rotnoden. 1 2 3 (preorder) 2 1 3 (inorder) 3 1 2 (postorder) 3
Generelle trær: Bredde først søk Implementeres med kø. Putt rotnoden i kø. Pop node fra køen. Putt alle barna på køen. Gjenta til køen er tom. 4 7 8 9 10 2 1 5 3 6 11 12 4
Generelle trær: Dybde først søk Implementeres med stack eller rekursjon. (her ved rekursjon) Kall dfs på rotnoden. dfs(node n): Kall dfs på barnenodene Behandle noden n. 3/10 2/19 1/24 11/18 4/5 6/7 8/9 12/17 20/23 13/14 15/16 21/22 5
Binære søketrær: Binære søketrær Hver node kan ikke ha flere en 2 barn. Verdien i en node er større enn alle verdiene i venstre subtre, og mindre enn alle verdiene i høyre subtre 30 13 41 7 18 50 5 8 24 21 27 6
Binære søketrær: Start i rotnoden Søk Gå til venstre hvis verdien i valgt node er høyere enn ønsket node. Høyre hvis motsatt. Gjenta til ønsket node er funnet, eller det ikke er mulig å gå lenger. Hvor er 21? 30 13<21 13 41 Høyre 18<21 7 18 50 Høyre 5 8 24 30>21 Venstre 24>21 Venstre 21=21 Ferdig! 21 27 7
Binære søketrær: Minimum/Maksimum Minimum: Start i rotnoden. Velg venstre barn. Gjenta til du kommer til en løvnode. Den har minste verdi. Maksimum: Symetrisk av minimum. Minste verdi? 30 13 41 7 18 50 5 8 24 5 er minst 21 27 8
Binære søketrær: Foregående/etterfølgende verdi Etterfølgende verdi: Dersom noden har et høyre barn, finn minste verdi i det høyre sub-treet. Hvis ikke, finn første foreldrenoden som ikke har forrige node som høyre barn. Foregående verdi: Symetrisk av etterfølgende verdi. 30 13 41 7 18 50 5 8 24 Neste tall er? 30 er neste 21 27 9
Binære søketrær: Implementasjon Kan implementeres med array. Slektskap til node i: Foreldre: i / 2 Venstre barn: 2i Høyre barn: 2i + 1 Se figur 6.1 (s 128) 30 13 41 7 18 50 1 2 3 4 5 6 7 30 13 41 7 18-50 VIKTIG: Tabellen starter på 1. 10
Binære søketrær: Innsetting Fungerer veldig likt søk. Søk etter verdien til den nye noden. Plasser noden som venstre/høyre barn avhengig av verdien. 6 30 13 41 7 18 50 5 8 24 6 21 27 11
Binære søketrær: Sletting Se side 262. 30 13 41 7 18 50 5 8 24 21 27 12
Rød-svarte trær: Rød-svarte trær Variant av binært tre. I denne tretypen får hver node tildelt en farge, enten rød eller svart, basert på tre regler: Roten i treet er svart Om en node er rød, må barna være svarte Alle stier fra en node til en løvnode må inneholde det samme antallet svarte noder. Garanterer en makshøyde på 2log(N+1) 13 7 30 5 8 18 50 24 41 13
Rød-svarte trær: Rotasjon Venstre-rotering: Sett node A som B sitt venstre barn. Sett node C som A sitt høyre barn. Høyre-rotering: Symetrisk av venstre-rotering. 30 A 13 41 B 35 C 50 41 B 30 A 50 13 35 C (røde kanter er endrede kanter) 14
Rød-svarte trær: Innsetting Sett inn noden på samme måte som ved innsetting i et vanlig binær-tre. Farg noden rød. Rydd opp! 6 30 13 41 7 18 50 5 8 24 6 21 27 15
Rød-svarte trær: Opprydding (1) Case 1: Z s onkely er rød. Farg Z s far og onkel svarte. Farg Z s bestefar rød. Fortsett oppryddning fra Z s bestefar. 5 Z 13 7 30 13 Ny Z 7 30 Y 5 16
Rød-svarte trær: Opprydding (2) Case 2: Z s onkely er svart,og Z er et høyre barn. Venstreroter Z og X for å få endret til case 3. Fortsett m ed case 3 - opprydding. 13 5 X 30 7 Z 13 Y 7 30 5 Ny Z 17
Rød-svarte trær: Opprydding (3) Case 3: Z s onkely er svart,og Z er et venstre barn. Høyreroter X og W Farg X svart Farg W rød. 5 Z 13 W 7 X 30 7 Y 5 13 30 18