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



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

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

Föreläsning 9 Innehåll

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å

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

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

Föreläsning Datastrukturer (DAT036)

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

Träd Hierarkiska strukturer

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

Föreläsning 13. Träd

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

Föreläsning Datastrukturer (DAT036)

Algoritmer och datastrukturer 2012, föreläsning 6

Vad har vi pratat om i kursen?

Föreläsning 9 Datastrukturer (DAT037)

Trädstrukturer och grafer

Datastrukturer. Föreläsning 5. Maps 1

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

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Föreläsning Datastrukturer (DAT036)

Tentamen, Algoritmer och datastrukturer

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

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

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

Tentamen Datastrukturer (DAT036)

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

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Föreläsning Datastrukturer (DAT037)

Symboliska konstanter const

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Föreläsning 9 Innehåll

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

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

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

DAI2 (TIDAL) + I2 (TKIEK)

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

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

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Lösningar Datastrukturer TDA

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

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

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

Föreläsning 4 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037)

Länkade strukturer, parametriserade typer och undantag

Datastrukturer. föreläsning 10. Maps 1

Övning 2. (Länkade) Listor, noder

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Lösningsförslag till exempeltenta 1

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

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

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Seminarium 13 Innehåll

Föreläsning 5 Datastrukturer (DAT037)

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

TDIU01 Programmering i C++

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

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

Inlämningsuppgift MiniPlotter

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

Föreläsning 10 Datastrukturer (DAT037)

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Föreläsning 10 Innehåll

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

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.

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

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.

Tillämpad Programmering (ID1218) :00-13:00

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Tentamen kl Uppgift 4. Uppgift 5

Föreläsning 3 Datastrukturer (DAT037)

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

TDIU01 / 725G

Föreläsning 2. AVL-träd, Multi-Way -sökträd, B-träd TDDD71: DALG. Innehåll. Innehåll. 1 Binära sökträd

Föreläsning 15: Repetition DVGA02

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

Sätt att skriva ut binärträd

Datastrukturer. föreläsning 9. Maps 1

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Transkript:

Träd

Träd Rot Förgrening Löv

Exempel: Organisationsschema Rot Överkucku Förgrening Underhuggare Underhuggare Administativ chef Kanslichef Knegare Knegare Knegare Byråchef Löv Intendent Avd. chef Intendent Avd. chef Intendent Pappersvändare Pappersvändare Pappersvändare

Exempel: Innehållsförteckning Mastering Algorithms with C I Preliminaries Introduction Pointer Manipulation Pointer fundamentals Storage allocation Aggregates... etc Recursion Analysis of Algorithms II Data Structures III Algorithms Löv Förgrening Rot

Exempel: Filkatalogstruktur Rot Förgrening Löv

Exempel: Programrepresentation Rot Program Förgrening foo() bar() baz() while () return; return; return; if Löv x = ; then y = ; else z =; 42 x 13

Trädexempel... Fönster på skärmen Widgets i fönstren Släktträd etc.

Binära träd En speciell kategori av träd Varje förgrening går till högst två noder Lite enklare då det är en specialisering Vi sätter fokus på binära träd...

ADT:n Binärt träd

Några begrepp Rutorna kallas noder (nodes), de innehåller något slags data som är av intressen för användningen Direkt uder en nod finns högst två noder, barn (child, kid). Specifikt: Left child, right child. Direkt över en nod finns högst en nod, dess förälder (parent) Noden som inte har någon annan över sig är rot (root) Anfäder (ancestors) alla över Ättlingar (descendants) alla under En noder som saknar barn är ett löv (leaf) Skog (forest) Trädhöjd

ADT:n Binärt träd Rot A: B: C: D: E: F: Children(A) = {B, C} Children(C) = {D} Children(E) = { }

ADT:n Binärt träd A: B: C: D: E: F: Parent(C) = A Parent(A) = finns ej

ADT:n Binärt träd A: B: C: D: E: F: Ancestors(D) = {C, A} Ancestors(A) = { }

ADT:n Binärt träd A: B: C: D: E: F: Descendants(C) = {D, E, F} Descendants(A) = {B, C, D, E, F}

ADT:n Binärt träd A: B: C: D: E: F: C utgör roten i ett delträd

Definition Ett binärt träd kan definieras genom följande rekursiva definition: Ingen nod är ett binärt träd (ett tomt binärt träd) En nod med två barnträd, ett vänster barnträd och ett höger barnträd, är ett binärt träd Grafiskt kan vi illustrera detta på följande sätt:

ADT:n Binärt träd A: B: C: D: E: F: Det tjänar dock inget syfte att rita ut dessa

ADT:n Binärt träd A: B: C: D: E: F: Man kan visa med stopmarkeringar istället - motsvarar NULL-pekare i C.

Övning Precis som i fallet med listor, stackar och köer vill göra en generell implementation av ADT:n BTree. Typen på data som kan lagras i noderna måste därför vara av typen voidpekare i C. Skriv en lämplig structdefinition för BTree. Deklarationen i h-filen ser ut så här: typedef struct BTree BTree; Detta är samtidigt typen på noderna.

ADT:ns operationer Sätta in en ny nod till vänster/höger Skapa nytt träd av två delträd Ta bort vänster/höger barnträd Tala om antalet noder Tala om höjden på trädet Svara på om nod är löv/rot Returnera data Returnera vänster/höger barnnod

Interfacet i C Btree *BtreeCreate(void *data); void BtreeDestroy(Btree *node); void *BTreeData(BTree *node); void BTreeInsertLeft(BTree *node, BTree *left); BTreeInsertRight BTree *BTreeLeft(BTree *node); BtreeRight void BTreeUnlinkLeft(BTree *node); BTreeUnlinkRight int BTreeSize(BTree *node); int BTreeHeight(BTree *node); int BTreeIsLeaf(BTree *node); int BTreeIsRoot(BTree *node);

Övningar (1) Implementera funktionen BTreeInsertLeft. Tänk på vilka fall som finns. Om du behöver anpassa deklarationen så gör det. Skriv slutligen den kommentar som måste finnas i h-filen. void BTreeInsertLeft(BTree *BTree, void *data); (2) Skriv koden som använder denna ADT för att bygga ett nytt träd givet två delträd (som kommer att bli barnträd till det nya). Skriv det som en funktion som tar lämpliga parametrar. Tycker du att detta skulle kunna vara en funktion som istället är en del av ADT:n.

Traversering av binära träd Travesrering (att klättra omkring i trädet och besöka noderna) sker oftast från vänster till höger.

Traversering A: B: C: D: E: F: Syftet med klättringen är att göra något med data i noderna som passeras. Ordningen mellan det man i en nod behandlar data relativt besöken av barnträden påverkar i allmänhet resultatet.

Traversering A: B: C: D: E: F: Antag att behandla data är att skriva ut data Antag att data är den bokstav som står intill noden Antag att behandling av data sker innan barnträden besöks Resulat? Skriv på ett papper!

Traversering A: B: C: D: E: F: Vi byter: Antag att behandling av data sker efter att barnträden besöks Resulat?

Traversering De metoder som brukar användas kallas Preorder: behandla data före barnträden Inorder: behandla data mellan barnträden Postorder: behandla data efter barnträden

Övning Skriv en funktion som tar ett binärt träd som input och som använder ADT:n BTree för att skriva ut alla trädnoder enligt postorder traversering. Anta att det data som finns i noderna är pekare till strängar. Från interfacet till BTree: Btree *BtreeCreate(void *data); void *BTreeData(BTree *node); void BTreeInsertLeft(BTree *node, BTree *left); BTree *BTreeLeft(BTree *node); void BTreeUnlinkLeft(BTree *node); int BTreeIsLeaf(BTree *node); int BTreeIsRoot(BTree *node);