Algoritmer och datastrukturer 2012, föreläsning 6

Relevanta dokument
Föreläsning 9 Innehåll

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Självbalanserande AVL-träd Weiss, avsnitt 4.4

Föreläsning 7. Träd och binära sökträd

Algoritmer och datastrukturer 2012, fo rela sning 8

Träd Hierarkiska strukturer

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Föreläsning Datastrukturer (DAT036)

Trädstrukturer och grafer

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Föreläsning 9 Datastrukturer (DAT037)

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

BST implementering, huvudstruktur

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Träd - C&P kap. 10 speciellt binära sökträd sid. 452

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

Algoritmer och datastrukturer, föreläsning 11

Föreläsning 9 Innehåll

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Föreläsning 10 Innehåll. Diskutera. Inordertraversering av binära sökträd. Binära sökträd Definition

DAI2 (TIDAL) + I2 (TKIEK)

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Föreläsning 10 Innehåll

13 Prioritetsköer, heapar

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 7. Träd och binära sökträd

Träd. Rot. Förgrening. Löv

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Datastrukturer. Föreläsning 5. Maps 1

Tentamen, Algoritmer och datastrukturer

Föreläsning 13. Träd

Föreläsning 4 Datastrukturer (DAT037)

Algoritmer och datastrukturer

Datastrukturer som passar för sökning. Föreläsning 10 Innehåll. Inordertraversering av binära sökträd. Binära sökträd Definition

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Datastrukturer som passar för sökning. Föreläsning 11 Innehåll. Binära sökträd Definition. Inordertraversering av binära sökträd

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 14. Filhantering

Föreläsning 14. Träd och filhantering

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Träd. Ett träd kan se ut på detta sätt:

Dugga Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

Lösningsförslag till exempeltenta 1

Föreläsning Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037)

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Tentamen Datastrukturer för D2 DAT 035

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Föreläsning Datastrukturer (DAT036)

Föreläsning 14 Innehåll

F4: Mer om OU1, OU2, listor och träd. Carl Nettelblad

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Tentamen Datastrukturer (DAT036)

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Lösningar Datastrukturer TDA

Datastrukturer. föreläsning 10. Maps 1

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Länkade strukturer, parametriserade typer och undantag

Seminarium 13 Innehåll

Tentamen Datastrukturer, DAT037 (DAT036)

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

Tentamen TEN1 HI

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Lösningsförslag till tentamen

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Tentamen Datastrukturer (DAT036)

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Grafik, grafiska användargränssnitt och rörliga bilder

Lösningsförslag till tentamen Datastrukturer, DAT037,

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc.

Träd, speciellt binära sökträd. Träd allmänt

Transkript:

lgoritmer och datastrukturer 2012, föreläsning 6 Nu lämnar vi listorna och kommer till nästa datastruktur i kursen: träd. Här nedan är ett exempel på ett träd: Båge Rot De rosa noderna är ett exempel på underträd Nod Förälder (till de gröna noderna) Barn (till den mörkblå noden) Löv (har inga barn) Till skillnad från riktiga träd så är roten längst upp i datavetenskapens träd. Några exempel på träd är: Släktträd visar en persons efterkommande Spelträd visar alla utfall i ett spel Filträd visar hur filer är ordnade i kataloger i ett operativsystem Sökträd mer om dessa i nästa föreläsning Syntaxträd beskriver hur man får sätta samman ord i ett språk till meningar Ett träds höjd är antalet bågar från roten till det (eller de) löv som sitter längst från roten. En nods djup är antalet bågar från roten till noden. Detta innebär att ett träds höjd är detsamma som det maximala djupet. Träd implementeras oftast med hjälp av referenser. Träd där en nod kan ha ett godtyckligt (eller åtminstone stort antal) barn kan implementeras på följande sätt: B C D B C D E F G H I E F G H I Trädet till vänster är implementerat till höger. Lådorna till höger representerar en nodklass som förutom data som ska lagras innehåller referenserna firstchild (svart pil) och nextsibling (röd pil).

Fördelen med detta sätt att implementera träd är att man inte behöver ha ett varierande antal referenser till en nods barn. Binära träd I ett binärt träd får en nod ha 0, 1 eller 2 barn. tt implementera binära träd är enkelt, varje nod behöver två referenser. En nodklass kan se ut så här: class BinaryNode<E>{ private E element; private BinaryNode<E> left; private BinaryNode<E> right; public BinaryNode(){ element = null; left = null; right = null; public BinaryNode(E elem, BinaryNode<E>l, BinaryNode<E> r){ element = elem; left = l; right = r; public E getelement(){return element; public BinaryNode<E> getleft(){return left; public BinaryNode<E> getright(){return right; public void setelement(e x){element = x; public void setleft(binarynode<e> t){left = t; public void setright(binarynode<e> t){right = t; public static int size(binarynode<e> t){ public static int height(binarynode<e> t){ public BinaryNode<E> duplicate(binarynode<e> t){

public void printinorder(){ Som synes så är några av metoderna inte utskrivna ovan, mer om dem längre fram. En trädklass som använder BinaryNode<E> kan se ut på följande sätt: class BinaryTree<E>{ private BinaryNode<E> root; public BinaryTree(){ root = null; public BinaryTree(E x){ root = new BinaryNode<E>(x, null, null); public BinaryNode<E> getroot(){return root; public int size(){return BinaryNode.size(root); public int height(){return BinaryNode.height(root); root.printpreorder(); public void printinorder(){ root.printinorder(); root.printpostorder(); public void makeempty(){root = null;

public boolean isempty(){return root == null; public void merge(e x, BinaryTree<E> lt, BinaryTree<E> rt){ //Ej ännu implementerad; Observera att metoderna i BinaryTree<E> i många fall använder motsvarande metoder i BinaryNode<E>. Vi implementerar ett par av metoderna som finns i BinaryNode<E> med hjälp av rekursion: public static int size(binarynode<e> t){ if (t == null) return 0; return 1 + size(t.left) + size(t.right); public static int height(binarynode<e> t){ if (t == null) return 0; return 1 + Math.max(height(t.left), height(t.right)); tt gå igenom ett träd ntag att vi vill gå igenom alla noderna i ett träd. Tre sätt att göra detta är så vanliga att de har fått egna namn. ntag att trädet ser ut så här: R V H R är roten i trädet och V och H är vänster respektive höger underträd. De tre sätten som finns att gå igenom trädet ser ut så här: Preorder: först R, sedan V och sist H Inorder: först V, sedan R och sist H Postorder: först V, sedan H och sist R Som en minnesregel kan man ha att V och H alltid kommer i den ordningen (man läser från vänster till höger och det som skiljer är var R ska placeras.

Exempel Låt oss anta att ett träd ser ut så här: M E R F N T B S Då går man igenom noderna i följande ordning när man använder de tre sätten: Preorder: MEBFRNTS Inorder: BEFMNRST Postorder: BFENSTRM Vi kan enkelt skriva metoder för att gå igenom träd. Dessa metoder finns i BinaryNode<E>: System.out.prinln(element.toString()); if (left!= null) left.printpreorder(); if (right!= null) right.printpreorder(); public void printinorder(){ if (left!= null) left.printinorder(); System.out.println(element.toString()); if (right!= null) right.printinorder(); if (left!= null) left.printpostorder(); if (right!= null) right.printpostorder(); System.out.prinln(element.toString()); Läsanvisningar gamla boken Kapitel 18