Trær. En datastruktur (og abstrakt datatype ADT)

Like dokumenter
Object [] element. array. int [] tall

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

INF2220: Forelesning 2

INF2220: Forelesning 2

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

Definisjon av binært søketre

Binære trær: Noen algoritmer og anvendelser

INF2220: Forelesning 1

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

INF2220: Forelesning 1

Lars Vidar Magnusson

Flerveis søketrær og B-trær

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Balanserte binære søketrær

Definisjon: Et sortert tre

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

PG4200 Algoritmer og datastrukturer Forelesning 7

INF2220: Gruppe me 2. Mathias Lohne Høsten 2017

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.

Et eksempel: Åtterspillet

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

EKSAMEN med løsningsforslag

Kap 9 Tre Sist oppdatert 15.03

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

IN Algoritmer og datastrukturer

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

LO118D Forelesning 12 (DM)

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer.

Selv-balanserende søketrær

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

PQ: HEAP. Heap. Er disse heap er? Hvordan implementere heap:

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

Et eksempel: Åtterspillet

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Notater til INF2220 Eksamen

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

Løsnings forslag i java In115, Våren 1998

INF Algoritmer og datastrukturer

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Magnus Moan (Undertegnede) Enkle datastrukturer, trær, traversering og rekursjon

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

EKSAMEN. Algoritmer og datastrukturer

Løsningsforslag 2017 eksamen

Generelle trær BINÆRTRÆR. Binærtrær

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

UNIVERSITETET I OSLO

Lars Vidar Magnusson

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Kap.12. Flervegssøketre. Studerer 2-3 og 2-4 trær. Sist oppdatert

Algoritmer og Datastrukturer

INF Algoritmer og datastrukturer

Level-Rebuilt B-Trees

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

INF Algoritmer og datastrukturer

Lars Vidar Magnusson Kapittel 13 Rød-Svarte (Red-Black) trær Rotasjoner Insetting Sletting

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

IN2010: Algoritmer og Datastrukturer Series 2

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Løsningsforslag

Binær heap. En heap er et komplett binært tre:

INF Algoritmer og datastrukturer

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

Algoritmer og datastrukturer Binære søketrær

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Løsningsforslag

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Trær og mengder

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

INF2810: Funksjonell Programmering. Trær og mengder

INF1010 Binære søketrær ++

UNIVERSITETET I OSLO

Et eksempel: Åtterspillet

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

Inf 1020 Algoritmer og datastrukturer

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

ALGORITMER OG DATASTRUKTURER

INF1020 Algoritmer og datastrukturer. Dagens plan

UNIVERSITETET I OSLO

INF2220: Time 4 - Heap, Huffmann

Disjunkte mengder ADT

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Trær og mengder

PG4200 Algoritmer og datastrukturer Forelesning 10

Transkript:

Trær

Trær En datastruktur (og abstrakt datatype ADT)

Trær En datastruktur (og abstrakt datatype ADT) En graf som 8lfredss8ller bestemte krav

Object [] int [] tall array element 0 1 2 3 4 5 0 1 2 3 4 5 6 7 8 40 55 63 17 22 68 89 97 89

graf

lenkeliste graf

Object data Node neste

Node neste

Node neste Node neste

Node Node neste neste Node neste

Node Node neste2 neste1 Node Node Node neste1 neste2 neste1

Node Node Node neste3 neste2 neste1 Node neste1

Node Node Node neste3 neste2 neste1 Node Node neste2 neste1

Node[] barn 0 1 2 3 4 5

Node[] barn 0 1 2 3 4 5 Node[] barn 0 1 2 3 4 5

Node[] barn 0 1 2 3 4 5 Node[] barn Node[] barn 0 1 2 3 4 5 0 1 2 3 4 5

Node[] barn 0 1 2 3 4 5 Node[] barn Node[] barn 0 1 2 3 4 5 0 1 2 3 4 5

Node[] barn 0 1 2 3 4 5 Node[] barn Node[] barn 0 1 2 3 4 5 0 1 2 3 4 5

Node[] barn 0 1 2 3 4 5 Node[] barn Node[] barn 0 1 2 3 4 5 0 1 2 3 4 5

Node[] barn 0 1 2 3 4 5 Node[] barn Node[] barn 0 1 2 3 4 5 0 1 2 3 4 5

A B C D E F G H I J K

A B C D E F G H Et tre er en sammenhengende asyklisk (uremet) graf I J K

A B C D E F G H Et tre er en sammenhengende asyklisk (uremet) graf I J K A tree is an undirected graph in which any two ver8ces are connected by exactly one path, or equivalently a connected acyclic undirected graph

A B C D E F G H Et tre er en sammenhengende asyklisk (uremet) graf I J K

A B C D E F G H Et tre er en sammenhengende asyklisk (uremet) graf I J K

A B E F C D I J K G H

Computers R Us Sales Manufacturing R&D US International Laptops Desktops Europe Asia Canada

A B C D E F G H I J K

rot A B C D E F G H I J K

rot A B C D E F G H I J K

rot A B C D E F G H gren? I J K

rot A B C D E F G H subtre I J K

rot A B C D E F G H subtre I J K

rot A B C D E F G H subtre Oppgave: I J K Hvilken bokstav er noden som er rot i subtreet merket med?

rot A B C D E F G H subtre Subtreet F har 4 noder. I J K List opp alle (sub)trær i figuren med antall noder, Der antall noder > 1. Ordne lista alfabe8sk.

rot A B C D E F G H subtre I J K løsning: A 11 B 6 C 3 F 4

A B Barna 8l A C D E F G H B, C og D I J K er søsken

A B Barna 8l A C D E F G H B, C og D har I J K A som forelder

A B C D E F G H besteforeldre I J K og barnebarn?

A B C D E F G H I J K løvnoder (bladnoder) barnløse noder

A B C D E F G H indre noder I J K foreldrenoder ikke løvnoder

A B C D E F G H H indre noder I J K foreldrenoder ikke løvnoder

Treterminologi rot A indre node løvnode forelder 8l en node B C D dybden 8l en node høyden 8l et tre emerkommere 8l en node E F G H subtre I J K

Treterminologi rot A indre node løvnode forelder 8l en node B C D dybden 8l en node høyden 8l et tre emerkommere 8l en node E F G H subtre I J K

Treterminologi rot indre noder A løvnode forelder 8l en node B C D dybden 8l en node høyden 8l et tre emerkommere 8l en node E F G H subtre I J K

Treterminologi rot A indre node løvnoder forelder 8l en node B C D dybden 8l en node høyden 8l et tre emerkommere 8l en node E F G H subtre I J K

Treterminologi rot A indre node løvnode forelder /l en node B C D dybden 8l en node høyden 8l et tre emerkommere 8l en node E F G H subtre I J K

Treterminologi rot A 0 indre node løvnode forelder 8l en node dybden /l en node B 1 C D høyden 8l et tre emerkommere 8l en node E F 2 G H subtre I J K

Rekursiv definisjon av dybden :l en node v Hvis v er rot, er dybden 8l v lik 0 Ellers er dybden 8l v lik 1 + dybden 8l forelderen 8l v.

Treterminologi rot A 0 indre node løvnode forelder 8l en node B 1 C D dybden 8l en node høyden /l et tre emerkommere 8l en node E F 2 G H subtre I J K 3

Treterminologi rot A 0 indre node løvnode forelder 8l en node B 1 C D dybden 8l en node høyden /l et tre emerkommere 8l en node E F 2 G H subtre I J K 3 den maksimale dybden

Treterminologi rot indre node løvnode forelder 8l en node dybden 8l en node høyden 8l et tre e4erkommere /l en node subtre E B F A G C H D I J K

Treterminologi rot A indre node løvnode forelder 8l en node B C D dybden 8l en node høyden 8l et tre emerkommere 8l en node subtre E F G H I J K

Rekursiv definisjon av et tre A Et tre er en samling noder. Et ikke-tomt tre består av en rot-node og null eller flere ikke-tomme subtrær. B C D Fra rota går det en kant 8l rota i hvert subtre. E F G H I J K

Rekursiv definisjon av et tre Et tre er en samling noder. Et ikke-tomt tre består av en rot-node og null eller flere ikke-tomme subtrær. Fra rota går det en kant 8l rota i hvert subtre. E B F I J K

Rekursiv definisjon av et tre Et tre er en samling noder. Et ikke-tomt tre består av en rot-node og null eller flere ikke-tomme subtrær. Fra rota går det en kant 8l rota i hvert subtre. F I J K

Rekursiv definisjon av et tre Et tre er en samling noder. Et ikke-tomt tre består av en rot-node og null eller flere ikke-tomme subtrær. Fra rota går det en kant 8l rota i hvert subtre. I

Treterminologi En s/ fra en node n1 8l en node nk er definert som en sekvens av noder n1, n2,. A nk slik at ni er forelder 8l ni+1 for 1 i k. B C D Lengden av denne s8en er antall kanter i s8en, det vil si k-1. E F G H I J K

Treterminologi En s/ fra en node n1 8l en node nk er definert som en sekvens av noder n1, n2,. A n1 nk slik at ni er forelder 8l ni+1 for 1 i k. B n2 C D Lengden av denne s8en er antall kanter i s8en, det vil si k-1. E F n3 G H n4 I J K

class Node { private Node[] barn; private Node forelder; public boolean errot() { return forelder == null; } public boolean erløvnode() { return barn[0] == null; } public boolean erindrenode() { return barn[0]!= null; } }

class Node { private Node[] barn; private Node forelder; public boolean errot() { return forelder == null; } public boolean erløvnode() { return barn[0] == null; } public boolean erindrenode() { return barn[0]!= null; Hvilken invariant gjelder for arrayen barn? } }

Traversering Gjøre noe i hver node, f.eks. skrive ut innholdet i (hele) treet Finne maksverdi o.l. Summere Søke noe (som ikke er i treet)

Traversering De to vanligste måtene: Prefiks (preorder): behandle noden før vi går videre 8l barna. Poskiks (postorder): behandle noden emer at vi har besøkt alle barna 8l noden.

A B C D E F G H I J K Prefiks (preorder): A, B, E, F, I, J, K, C, G, H, D Poskiks (postorder): E, I, J, K, F, B, G, H, C, D, A

trær binære trær binære søketrær

1 1 2 3 4 7 null null null null null null null null 8 15 31 63 127

n 2 n 2 n - 1 0 1 0 1 2 1 2 4 3 3 8 7 4 16 15 5 32 31 6 64 63 2 n -1

2 1 = 2 2 2 = 4 2 4 = 16 2 8 = 256 2 16 = 65.536 2 32 = 4.294.967.296 2 64 = 18.446.744.073.709.551.616 (20 siffer) 2 128 = 340.282.366.920.938.463.463.374.607.431.768.211.456 (39 siffer) 2 256 = 115.792.089.237.316.195.423.570.985.008.687.907.853.269.984.665.640.564.039.457.584.007.913.129. 639.936 (78 siffer) 2 512 = 13.407.807.929.942.597.099.574.024.998.205.846.127.479.365.820.592.393.377.723.561.443.721.764.0 30.073.546.976.801.874.298.166.903.427.690.031.858.186.486.050.853.753.882.811.946.569.946.433.6 49.006.084.096 (155 siffer)

Logaritmer har et grunntall x, for eksempel x = 2 eller x = 10. Vi bruker stort sem x = 2. Logaritmen 8l et tall b er det tallet a vi må opphøye grunntallet x i for å få b, dvs hvis x a = b, så er log x b = a. 2 0 = 1 log 2 1 = 0 2 1 = 2 log 2 2 = 1 2 2 = 4 log 2 4 = 2 2 3 = 8 log 2 8 = 3 2 4 = 16 log 2 16 = 4 2 10 = 1024 log 2 1024 = 10

Ubalansert binærtre Balansert binærtre

Binære søketrær Binære søketrær er binærtrær hvor følgende gjelder for hver node i treet: Alle verdiene i venstre subtre er mindre enn verdien i noden selv. Alle verdiene i høyre subtre er større enn verdien i noden selv.

Binærsøk

0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 3 4 5 7 8 9 11 14 16 18 19

l m h 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 3 4 5 7 8 9 11 14 16 18 19 m = ( l + h ) / 2 ; m = ( 0 + 12 ) / 2 = 12/2 = 6

l m h 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 3 4 5 7 8 9 11 14 16 18 19 m = ( l + h ) / 2 ; m = ( 0 + 12 ) / 2 = 12/2 = 6

l m h 0 1 2 3 4 5 6 7 8 9 10 11 12 0 1 3 4 5 7 8 9 11 14 16 18 19 m = ( l + h ) / 2 ; m = ( 0 + 5 ) / 2 = 5/2 = 2

0 1 2 3 4 5 6 7 8 9 10 11 12 l 0 1 3 4 5 7 8 9 11 14 16 18 19 m h l 0 1 3 4 5 7 8 9 11 14 16 18 19 m h 0 0 1 3 4 5 7 8 9 11 14 16 18 19 l m h 1 3 4 5 7 8 9 11 14 16 18 19 l=m =h

l 0 1 3 4 5 7 8 9 11 14 16 18 19 m h 8 3 16 1 5 11 18 0 4 7 9 14 19

0 1 3 4 5 7 8 9 11 14 16 18 19 l m h 8 3 16 1 5 11 18 0 4 7 9 14 19

0 1 3 4 5 7 8 9 11 14 16 18 19 l m h 8 3 16 1 5 11 18 0 4 7 9 14 19

0 1 3 4 5 7 8 9 11 14 16 18 19 l=m =h 8 3 16 1 5 11 18 0 4 7 9 14 19

8 3 16 1 5 11 18 0 4 7 9 14 19 Binære søketrær er binærtrær hvor følgende gjelder for hver node i treet: Alle verdiene i venstre subtre er mindre enn verdien i noden selv. Alle verdiene i høyre subtre er større enn verdien i noden selv.

Search To search for a key k. we trace a downward path starting at the root The next node visited depends on the comparison of k with the key of the current node If we reach a leaf, the key is not found Example: get(4): n Call TreeSearch(4,root) The algorithms for nearest neighbor queries are similar Algorithm TreeSearch(k, v) if T.isExternal (v) return v if k < key(v) return TreeSearch(k, leftchild(v)) else if k = key(v) return v else { k > key(v) } return TreeSearch(k, rightchild(v)) 2 < > 1 4 = 8 6 9 2015 Goodrich and Tamassia Binary Search Trees 93

public class BinTre { Node rot = null; class Node { int verdi; Node venstre, hoyre; } } public Node finnverdiibintre (int verdi, Node tre) { Node retur = null; if ( tre == null ) retur = null; else if ( verdi < tre.verdi ) retur = finnverdiibintre( verdi, tre.venstre ); else if ( verdi == tre.verdi ) retur = tre; else if ( verdi > tre.verdi ) retur = finnverdiibintre( verdi, tre.hoyre ); return retur; }

Søking For å søke etter en node med en bestemt Verdi starter vi i rotnoden og søker nedover i treet Neste subtre det skal søkes I avhenger av sammenligningen mellom verdien vi leter etter og verdien i noden Hvis subtreet vi skal fortsette å søke i er tomt, finnes ikke verdien i treet. Eksempel: n 2015 Goodrich and Tamassia finnverdiibintre(4,rot); public Node finnverdiibintre (int verdi, Node tre) { Node retur = null; if ( tre == null ) retur = null; else if ( verdi < tre.verdi ) retur = finnverdiibintre( verdi, tre.venstre ); else if ( verdi == tre.verdi ) retur = tre; else if ( verdi > tre.verdi ) retur = finnverdiibintre( verdi, tre.hoyre ); return retur; } Node 2 < > 1 4 = 8 null null null null null null 6 9 rot null 95

Søking For å søke etter en node med en bestemt Verdi starter vi i rotnoden og søker nedover i treet Neste subtre det skal søkes I avhenger av sammenligningen mellom verdien vi leter etter og verdien i noden Hvis subtreet vi skal fortsette å søke i er tomt, finnes ikke verdien i treet. Eksempel: n 2015 Goodrich and Tamassia finnverdiibintre(5,rot); public Node finnverdiibintre (int verdi, Node tre) { Node retur = null; if ( tre == null ) retur = null; else if ( verdi < tre.verdi ) retur = finnverdiibintre( verdi, tre.venstre ); else if ( verdi == tre.verdi ) retur = tre; else if ( verdi > tre.verdi ) retur = finnverdiibintre( verdi, tre.hoyre ); return retur; } Node 2 < > 1 4 8 > null null null null null null 6 9 rot null 96

Søking For å søke etter en node med en bestemt Verdi starter vi i rotnoden og søker nedover i treet Neste subtre det skal søkes I avhenger av sammenligningen mellom verdien vi leter etter og verdien i noden Hvis subtreet vi skal fortsette å søke i er tomt, finnes ikke verdien i treet. Eksempel: n 2015 Goodrich and Tamassia finnverdiibintre(5,rot); Node finnverdiibintre (int verdi, Node tre) { if ( tre == null ) return null; else if ( verdi < tre.verdi ) return finnverdiibintre(verdi,tre.venstre); else if ( verdi == tre.verdi ) return tre; else // verdi > tre.verdi return finnverdiibintre( verdi, tre.hoyre ); } 2 < > 1 4 8 > null null null null null null 6 9 Node rot null 97

Insertion To perform operation put(k, o). we search for key k (using TreeSearch) Assume k is not already in the tree, and let w be the leaf reached by the search We insert k at node w and expand w into an internal node Example: insert 5 < 6 2 > 1 4 > 8 w 6 2 1 4 8 w 5 9 9 2015 Goodrich and Tamassia Binary Search Trees 98

Innsetting Vi søker først på vanlig måte etter en node med verdien k vi skal sette inn Anta at k ikke finnes i treet fra før. Vi vil da ende opp med å finne et tomt subtree (nullpeker) der noden med verdi k skulle vært. Vi setter inn den nye noden istedet for det tomme treet vi fant. Eksempel: sett inn 5 2 2 < > Eksempel: sett inn 1 4 8 > null null null null null null 1 4 8 null null null null null null 5 6 6 null null 9 9 5 null null null 2015 Goodrich and Tamassia Binary Search Trees 99

GjennomsniMsanalyse Intui8vt forventer vi at alle operasjonene som ukøres på et binært søketre vil ta O(log n) 8d siden vi hele 8den grovt sem halverer størrelsen på treet vi jobber med. Det kan bevises at den gjennomsnimlige dybden 8l nodene i treet er O(log n) når alle innseqngsrekkefølger er like sannsynlige. (se teorem 3.6, s. 109).

GjennomsniMsanalyse Intui8vt forventer vi at alle operasjonene som ukøres på et binært søketre vil ta O(log n) 8d siden vi hele 8den grovt sem halverer størrelsen på treet vi jobber med. Det kan bevises at den gjennomsnimlige dybden 8l nodene i treet er O(log n) når alle innseqngsrekkefølger er like sannsynlige. Teorem 3.6: Hvis T er et 8lfeldig konstruert binært søketre med n > 4 noder, så er høyden 8l T = O(log n) med en sannsynlighet på minst 1 1/n.

Worst-case analyse I verste fall brukes bare venstre- (eller høyre-) pekerne i treet, og det binære søketreet blir i praksis lik en enkel liste. Vi får da worst-case O(n) 8d for innseqng, søking, sleqng osv. Ubalanserte trær kan for eksempel skyldes: spesiell innseqngsrekkefølge ( s8gende/ synkende orden) ujevn sleqng

Deletion We consider the case where the key k to be removed is stored at a node v whose children are both internal n we find the internal node w that follows v in an inorder traversal 1 2 z v 3 w 5 8 6 9 n we copy key(w) into node v n we remove node w and its left child z (which must be a leaf) by means of operation removeexternal(z) 1 2 5 v 8 Example: remove 3 6 9 2015 Goodrich and Tamassia Binary Search Trees 104

Fjerning av indre node Vi ser på et eksempel der noden v som skal fjernes ikke er en løvnode: 1 2 3 v 8 n n Vi finner den minste noden w i det høyre subtreet til v Vi erstatter v med w w 5 6 9 n Vi fjerner noden w Eksempel: Fjern noden med verdi 3 1 5 v 2 8 6 9 2015 Goodrich and Tamassia Binary Search Trees 105

Fjerning av indre node Vi ser på et eksempel der noden v som skal fjernes ikke er en løvnode: 1 2 3 v 8 n n Vi finner den minste noden w i det høyre subtreet til v Vi erstatter v med w w 6 9 7 n Vi fjerner noden w Eksempel: Fjern noden med verdi 3 1 6 v 2 8 7 9 2015 Goodrich and Tamassia Binary Search Trees 106

v skal byttes ut med w 1 3 v 2 8 w 6 9 null 7 2015 Goodrich and Tamassia Binary Search Trees 107

Node p Node v skal byttes ut med w 1 v 3 2 8 Node w null 6 9 7 108

Node p Node v skal byttes ut med w 1 v 3 v.right.left = w.right; 2 8 Node w null 6 9 7 109

Node p Node v skal byttes ut med w 1 v 3 v.right.left = w.right; 2 6 8 null Node w 7 9 110

Node p Node v skal byttes ut med w 1 v 2 3 6 8 v.right.left = w.right; w.left = v.left; w.right = w.right; Node w 7 9 111

Node p Node v skal byttes ut med w 1 v 2 3 6 8 v.right.left = w.right; w.left = v.left; w.right = w.right; p.right = w; Node w 7 9 112

Node p Node v skal byttes ut med w 1 3 v 2 Node 6 8 v.right.left = w.right; w.left = v.left; w.right = w.right; p.right = w; v.left = null; v.right = null; w 7 9 113

Node p Node v skal byttes ut med w 1 3 v 2 Node 6 8 v.right.left = w.right; w.left = v.left; w.right = w.right; p.right = w; v.left = null; v.right = null; w 7 9 114

1 6 2 8 7 9 115

1 1 3 v w 6 2 8 2 8 w 6 9 7 9 7 116