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

Like dokumenter
INF1010 Binære søketrær ++

INF1010 siste begreper før oblig 2

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

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

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

UNIVERSITETET I OSLO

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

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

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

Definisjon av binært søketre

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

UNIVERSITETET I OSLO

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

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

UNIVERSITETET I OSLO

Balanserte binære søketrær

Algoritmer og datastrukturer Eksamen

Binære trær: Noen algoritmer og anvendelser

Algoritmer og Datastrukturer

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

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

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

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

UNIVERSITETET I OSLO

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

INF1010. Grensesnittet Comparable<T>

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

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

UNIVERSITETET I OSLO

INF2220: Forelesning 2

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og datastrukturer Eksamen

INF1010. Stein Michael Storleer (michael) Lenkelister

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

INF2220: Forelesning 2

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

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

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

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

UNIVERSITETET I OSLO

INF1010 e-postadresser

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

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Definisjon: Et sortert tre

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

UNIVERSITETET I OSLO

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Rekursjon. Binærsøk. Hanois tårn.

INF2220: Forelesning 1

EKSAMEN med løsningsforslag

UNIVERSITETET I OSLO

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

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

Algoritmer og Datastrukturer

Lenkelister og beholdere av lenkelister

Algoritmer og datastrukturer Løsningsforslag

Løsningsforslag til INF110 h2001

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

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

Object [] element. array. int [] tall

UNIVERSITETET I OSLO

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

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

Algoritmer og Datastrukturer

Seminaroppgaver IN1010, uke 2

Vanlige datastrukturer. I dette lysarksettet

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

INF2220: Forelesning 1

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

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

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

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

Algoritmer og datastrukturer Eksamen

Fagnr: SO 131 A. Ant. vedlegg: 1 (2 sider)

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

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

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 10 sider inklusiv vedlegg og denne forsiden.

Binære Søketre. Egenskap. Egenskap : Grafisk. Egenskap : Kjøretid. Egenskap : Kjøretid. Egenskap : Oppsumering. Binære Søketre

INF1000: Forelesning 7

Fagnr: A. Ant. vedlegg: 1 (2 sider)

PG4200 Algoritmer og datastrukturer Forelesning 7

Lenkelister. Lister og køer.

Velkommen til INF1010

KONTINUASJONSEKSAMEN

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

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

København 20 Stockholm

~ta11 oppgaver: 4. Nle skriftlige hjelpemidler-både trykte og håndskrevne, er tillatt

INF1010. grensesni-et Comparable<T> grensesni-et Iterable<T> rekursjon

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

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Transkript:

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

public void skrivutmeg ( ) { System. out. println (navn + " er venn med " + minbestevennheter ( ) ) ; public void skrivutallt ( ) { skrivutmeg ( ) ; i f ( hentbestevenn ( )!= null ) hentbestevenn ( ). skrivutallt ( ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 2

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 3

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 4

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 5

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 6

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 7

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 8

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 9

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 10

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { skrivutmeg ( ) ; i f ( neste!= null ) neste. skrivutmegogresten ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 11

michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 12

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 13

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 14

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 15

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 16

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 17

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 18

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 19

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 20

null class ListeElement { Object data ; ListeElement neste ; public void skrivutmegogresten ( ) { i f ( neste!= null ) neste. skrivutmegogresten ( ) ; skrivutmeg ( ) ;... michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 21

class ListeElement { Object data ; ListeElement neste ; public void settinnsist ( ListeElement ny) { i f ( neste == null ) neste = ny; else neste. settinnsist ( ny ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 22

Eksempler på enkle rekursive metoder: Finne maks- eller minimumsverdier skrive ut / traversere hele lista gjøre endringer i hele datastrukturen for utvalgte objekter michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 23

hvorfor er lenkelister en rekursiv datastruktur? er sudokubrettet en lenkeliste? hvilke invariante tilstandspåstander i en lenkeliste må holde for at vi kan programmere rekursivt? Forslag: alle listeelementer har en og bare en nestepeker ingen nestepekere peker på førsteelementet alle andre elementer blir pekt på av en og bare en nestepeker en og bare en nestepeker er null (i siste element) michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 24

Hva er et binærtre? michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 25

michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 26

michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 27

michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 28

michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 29

12 0 2 99 17 37 7 5 9 1 michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 30

7 1 37 0 2 12 99 5 9 17 michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 31

7 1 37 0 2 12 99 rot subtre (barn) dybde (høyde) 5 9 17 michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 32

9 37 1 99 17 5 0 12 7 2 michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 33

Node venstre int 7 verdi Node høyre michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 34

Node venstre int 7 verdi Node høyre class Node { int verdi ; // representerer sorteringskriteriet Node venstre ; // peker til subtreet til venstre Node høyre ; // peker til subtreet til høyre Node ( int i ) { verdi = i ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 35

settinnnode( Node ny ) Node venstre int 7 verdi Node høyre class Node { int verdi ; Node venstre, høyre ;... public void settinnnode ( Node ny ) { i f ( venstre == null ) venstre = ny; else venstre. settinnnode (ny ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 36

settinnnode( Node ny ) Node venstre int 7 verdi Node høyre class Node { int verdi ; Node venstre, høyre ;... public void settinnnode ( Node ny ) { i f ( venstre == null ) venstre = ny; else i f ( høyre == null ) høyre = ny; else venstre. settinnnode (ny ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 37

settinnnode( Node ny ) Node venstre int 7 verdi Node høyre class Node { int verdi ; Node venstre, høyre ;... public void settinnnode ( Node ny ) { i f (ny. verdi > verdi ) <sett inn t i l høyre> else <sett inn t i l venstre> michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 38

settinnnode( Node ny ) Node venstre int 7 verdi Node høyre public void settinnnode ( Node ny ) { i f (ny. verdi > verdi ) i f ( høyre == null ) høyre = ny; else høyre. settinnnode (ny ) ; else i f ( venstre == null ) venstre = ny; else venstre. settinnnode (ny ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 39

void leggtiltre(node<ord> inn) Node<Ord> finnidenneellerunder(node<ord> likdenne) void skrivut() Sterkt forenklet: Node<Ord> venstre Ord denne Node<Ord> høyre kryss int compareto(ord o) void skrivut() kryss String ordet michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 40

Klassen Node<T> class Node <T extends BTNodeRolle <T>> { Node<T> venstre, høyre ; T denne; Node (T t ) { denne = t ; void leggtiltre (Node <T> inn ) Node<T> finnidenneellerunder (Node <T> likdenne ) void skrivut ( ) michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 41

interface BTNodeRolle <T>{ int compareto(t e ) ; void skrivut ( ) ; class Node <T extends BTNodeRolle <T>> { Node<T> venstre, høyre ; T denne; Node (T t ) { denne = t ; void leggtiltre (Node <T> inn ) Node<T> finnidenneellerunder (Node <T> likdenne ) void skrivut ( ) michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 42

class Ord implements BTNodeRolle <Ord> { private String ordet ; Ord ( String s ) { ordet = s ; public int compareto( Ord o) public void skrivut ( ) public class Eksempel1 { public static void main( String [ ] args ) { Node<Ord> rot = new Node<Ord> (new Ord( kryss ) ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 43

Klassen Ord class Ord implements BTNodeRolle <Ord> { private String ordet ; Ord ( String s ) { ordet = s ; public int compareto( Ord o ) { return ordet. comparetoignorecase ( o. ordet ) ; public void skrivut ( ) { System. out. print ( ordet+" " ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 44

Et Node<Ord>-objekt Tilstand i programmet etter setningen Node<Ord> rot = new Node<Ord> (new Ord(kryss")); void leggtiltre(node<ord> inn) Node<Ord> finnidenneellerunder(node<ord> likdenne) Node<Ord> rot void skrivut() Sterkt forenklet: Node<Ord> venstre Ord denne Node<Ord> høyre kryss int compareto(ord o) kryss void skrivut() String ordet Konstruktører: Ord (String s) {ordet = s; Node (T t) {denne = t; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 45

Fra main-metoden Node<Ord> rot = new Node<Ord> (new Ord( " kryss " ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( "hanske" ) ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( " angre " ) ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( " nikkel " ) ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( " ansvar " ) ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( " juletre " ) ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( " trøffel " ) ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( " hylle " ) ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( " adrenalin " ) ) ) ; rot. leggtiltre (new Node<Ord> (new Ord( " laser " ) ) ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 46

Settinnmetoden i Node<T> void leggtiltre (Node <T> inn ) { int smnlgn = denne. compareto( inn. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) høyre = inn ; else høyre. leggtiltre ( inn ) ; else i f ( venstre == null ) venstre = inn ; else venstre. leggtiltre ( inn ) ; Hva skjer med like objekter? michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 47

Node<Ord> rot kryss hanske Datastruktur ved kall på settinn-metoden (over) og resultat (under) Node<Ord> rot kryss hanske michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 48

Node<Ord> rot kryss angre hanske void leggtiltre (Node <T> inn ) { int smnlgn = denne. compareto( inn. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) høyre = inn ; else høyre. leggtiltre ( inn ) ; else i f ( venstre == null ) venstre = inn ; else venstre. leggtiltre ( inn ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 49

Node<Ord> rot kryss hanske angre void leggtiltre (Node <T> inn ) { int smnlgn = denne. compareto( inn. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) høyre = inn ; else høyre. leggtiltre ( inn ) ; else i f ( venstre == null ) venstre = inn ; else venstre. leggtiltre ( inn ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 50

Node<Ord> rot kryss hanske angre void leggtiltre (Node <T> inn ) { int smnlgn = denne. compareto( inn. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) høyre = inn ; else høyre. leggtiltre ( inn ) ; else i f ( venstre == null ) venstre = inn ; else venstre. leggtiltre ( inn ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 51

Node<Ord> rot kryss kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 52

Node<Ord> rot kryss hanske kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 53

Node<Ord> rot kryss angre hanske kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 54

Node<Ord> rot kryss angre hanske kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser nikkel michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 55

Node<Ord> rot kryss angre hanske ansvar kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser nikkel michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 56

Node<Ord> rot kryss angre hanske ansvar juletre kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser nikkel michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 57

Node<Ord> rot kryss angre hanske ansvar juletre kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser nikkel trøffel michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 58

Node<Ord> rot kryss angre hanske ansvar juletre hylle kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser nikkel trøffel michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 59

Node<Ord> rot kryss adrenalin angre hanske ansvar juletre hylle kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser nikkel trøffel michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 60

Node<Ord> rot kryss adrenalin angre hanske ansvar juletre hylle kryss hanske angre nikkel ansvar juletre trøffel hylle adrenalin laser laser nikkel trøffel michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 61

Finnmetoden i Node<T> Node<T> finnidenneellerunder (Node <T> likdenne ) { Node<T> fantdette ; int smnlgn = denne. compareto( likdenne. denne ) ; i f ( smnlgn < 0 ) i f ( høyre == null ) fantdette = null ; else fantdette = høyre. finnidenneellerunder ( likdenne ) ; else i f ( smnlgn > 0 ) i f ( venstre == null ) fantdette = null ; else fantdette = venstre. finnidenneellerunder ( likdenne ) ; else // smnlgn == 0, dvs. dette er noden det letes etter fantdette = this ; return fantdette ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 62

Node<Ord> rot kryss hanske nikkel angre juletre laser trøffel adrenalin ansvar hylle Node<Ord> funnet = rot. finnidenneellerunder (new Node<Ord> (new Ord( " hanske" ) ) ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 63

Node<Ord> rot kryss hanske nikkel angre juletre laser trøffel adrenalin ansvar hylle funnet. skrivut ( ) ; michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 64

Skrivutmetoden i Node<T> void skrivut ( ) { i f ( venstre!= null ) venstre. skrivut ( ) ; denne. skrivut ( ) ; i f ( høyre!= null ) høyre. skrivut ( ) ; NB! Rekkefølgen på skrivut-kallene vil forandre rekkefølgen. Metoden som er vist skriver ut objektene i alfabetisk stigende rekkefølge. Hvorfor? michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 65

Hva må du kunne om binære søketrær i INF1010 Lage programmer som 1. bygger opp et binært søketre (sette inn objekter) 2. finner igjen et objekt i et binært søketre 3. traverserer hele treet (f.eks. skriver ut alle objektene) 4. gjør om et binært søketre til en sortert liste 5. gjør om en usortert liste til et binært søketre (samme som 1.) Du skal også kunne gjøre rede for tilstandspåstandene som ligger til grunn for at en datastruktur skal være et binært søketre. Vil du vite mer om binære søketrær, kan denne wikipediaartikkelen være et greit utgangspunkt: http://en.wikipedia.org/wiki/binary_search_tree michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 66

Tilstandspåstander et binært søketre (BST) består av 0 til n noder (noder) For alle noder i et BST gjelder: en node har en konstant verdi og en compareto-metode som er veldefinert når noden sammenlignes med andre noder en node har pekere til to BST (subtrær), v og h. alle nodene i venstre subtre (hvis ikke tomt) har verdier som er mindre enn eller lik nodens verdi basert på returverdien til nodens compareto-metode. alle nodene i høyre subtre har verdier som er større enn eller lik nodens verdi basert på returverdien til nodens compareto-metode. michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 67

Fra binærtre til liste Node<Ord> rot kryss hanske nikkel angre juletre laser trøffel adrenalin ansvar hylle Liste er en enklere struktur å lage en iterator over. michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 68

Node<Ord> rot kryss hanske nikkel angre juletre laser trøffel adrenalin ansvar hylle michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 69

Node<Ord> rot kryss Node<Ord> liste hanske nikkel angre juletre laser trøffel adrenalin ansvar hylle michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 70

Et objekt av klassen Tre<Ord> Svarte nodeobjekter er av den indre klassen Node i Tre kryss Et objekt av klassen Liste<Ord> hanske nikkel angre juletre laser trøffel Grønne objekter er av klassen Ord adrenalin ansvar hylle Røde nodeobjekter er objekter av den indre nodeklassen i Liste michael@ifi.uio.no INF1010 18. april 2013 (uke 16) 71