Top Banner
Algoritmi e Strutture Dati Alberi Alberto Montresor Università di Trento 2018/10/19 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
84

Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Feb 17, 2019

Download

Documents

buidang
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Algoritmi e Strutture Dati

Alberi

Alberto Montresor

Università di Trento

2018/10/19

This work is licensed under a Creative CommonsAttribution-ShareAlike 4.0 International License.

references

Page 2: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Sommario

1 IntroduzioneEsempiDefinizioni

2 Alberi binariIntroduzioneImplementazioneVisite

3 Alberi genericiVisiteImplementazione

Page 3: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Esempi

Esempio 1

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 1 / 34

Page 4: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Esempi

Esempio 2

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 2 / 34

Page 5: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Esempi

Esempio 3

<html>

<head>

<meta http-equiv="Content-Type" content="text/html"/>

<title>simple</title>

</head>

<body>

<h1>A simple web page</h1>

<ul>

<li>List item one</li>

<li>List item two</li>

</ul>

<h2>

<a href="http://www.google.com">Google</a>

</h2>

</body>

</html>

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 3 / 34

Page 6: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Esempi

Esempio 3

html

head

meta

title

body

h1 ul

li li

h2

a

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 4 / 34

Page 7: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Definizioni

Albero radicato – Definizione 1

Albero radicato (Rooted tree)

Un albero consiste di un insieme di nodi e un insieme di archiorientati che connettono coppie di nodi, con le seguenti proprietà:

Un nodo dell’albero è designato come nodo radice;

Ogni nodo n, a parte la radice, ha esattamente un arcoentrante;

Esiste un cammino unico dalla radice ad ogni nodo;

L’albero è connesso.

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 5 / 34

Page 8: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Definizioni

Albero radicato – Definizione 2 (Ricorsiva)

Albero radicato (Rooted tree)

Un albero è dato da:un insieme vuoto, oppureun nodo radice e zero o più sottoalberi, ognuno dei quali è unalbero; la radice è connessa alla radice di ogni sottoalbero conun arco orientato.

Root

T1 T2 . . . Tk

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 6 / 34

Page 9: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Definizioni

Terminologia

A

B

D

H I

E

J K

C

F

L M

G

Sottoalbero SottoalberoRadice

A è la radiceB,C sono radicidei sottoalberiD,E sono fratelli

D,E sono figli diB

B è il padre diD,E

I nodi viola sonofoglieGli altri nodisono nodi interni

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 7 / 34

Page 10: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Definizioni

Terminology (English)

A

B

D

H I

E

J K

C

F

L M

G

Subtree SubtreeRoot

A is the tree rootB,C are roots oftheir subtreesD,E are siblings

D,E are childrenof BB is the parent ofD,E

Purple nodes areleavesThe other nodesare internal nodes

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 8 / 34

Page 11: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Introduzione Definizioni

Terminologia

Profondità nodi (Depth)

La lunghezza del camminosemplice dalla radice al nodo(misurato in numero di archi)

Livello (Level)

L’insieme di nodi alla stessaprofondità

Altezza albero (Height)

La profondità massima dellasue foglie

Livello

0

1

2

3

Altezza di questo albero = 3

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 9 / 34

Page 12: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Sommario

1 IntroduzioneEsempiDefinizioni

2 Alberi binariIntroduzioneImplementazioneVisite

3 Alberi genericiVisiteImplementazione

Page 13: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Introduzione

Albero binario

Albero binario

Un albero binario è un albero radicato in cui ogni nodo ha al mas-simo due figli, identificati come figlio sinistro e figlio destro.

Nota: Due alberi T e U che hanno gli stessi nodi, gli stessi figli per

ogni nodo e la stessa radice, sono distinti qualora un nodo u sia

designato come figlio sinistro di v in T e come figlio destro di v in U .

1

2

3

5

4

T1

1

2

3

5

4

T2

1

2

3

5

4

T3 Livello

0

1

2

3

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 10 / 34

Page 14: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Introduzione

Specifica (Albero binario)

Tree% Costruisce un nuovo nodo, contenente v, senza figli o genitoriTree(Item v)

% Legge il valore memorizzato nel nodoItem read()

% Modifica il valore memorizzato nel nodowrite(Item v)

% Restituisce il padre, oppure nil se questo nodo è radiceTree parent()

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 11 / 34

Page 15: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Introduzione

Specifica (Albero binario)

Tree% Restituisce il figlio sinistro (destro) di questo nodo; restituisce nil seassente

Tree left()Tree right()

% Inserisce il sottoalbero radicato in t come figlio sinistro (destro) diquesto nodo

insertLeft(Tree t)insertRight(Tree t)

% Distrugge (ricorsivamente) il figlio sinistro (destro) di questo nododeleteLeft()deleteRight()

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 12 / 34

Page 16: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Implementazione

Memorizzare un albero binario

P

L R

P

L R

P

L R

P

L R

P

L R

P

L R

P

L R

Campi memorizzati nei nodi

parent: reference al nodo padreleft: reference al figlio sinistroright: reference al figlio destro

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 13 / 34

Page 17: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Implementazione

Implementazione

TreeTree(Item v)

Tree t = new Treet.parent = nilt.left = t.right = nilt.value = vreturn t

insertLeft(Tree T )if left ==nil then

T.parent = thisleft = T

insertRight(Tree T )if right ==nil then

T.parent = thisright = T

deleteLeft()if left 6= nil then

left.deleteLeft()left.deleteRight()left = nil

deleteRight()if right 6= nil then

right.deleteLeft()right.deleteRight()right = nil

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 14 / 34

Page 18: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Visite di alberi

Visita di un albero / ricerca

Una strategia per analizzare (visitare) tutti i nodi di un albero.

Visità in profonditàDepth-First Search (DFS)

Per visitare un albero, sivisita ricorsivamente ognunodei suoi sottoalberi

Tre varianti: pre/in/postvisita (pre/in/post order)

Richiede uno stack

Visita in ampiezzaBreadth First Search (BFS)

Ogni livello dell’albero vienevisitato, uno dopo l’altroSi parte dalla radiceRichiede una queue

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 15 / 34

Page 19: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 16 / 34

Page 20: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: AStack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 21: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B

Stack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 22: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C

Stack: A B C

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 23: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C

Stack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 24: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D

Stack: A B D

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 25: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D

Stack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 26: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D

Stack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 27: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D E

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 28: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D E F

Stack: A E F

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 29: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D E F

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 30: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D E F G

Stack: A E G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 31: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D E F G

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 32: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D E F G

Stack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 33: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Pre-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: A B C D E F G

Stack:

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 17 / 34

Page 34: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence:Stack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 35: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence:Stack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 36: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: CStack: A B C

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 37: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B

Stack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 38: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D

Stack: A B D

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 39: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D

Stack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 40: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D A

Stack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 41: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D A

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 42: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D A F

Stack: A E F

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 43: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D A F E

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 44: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D A F E G

Stack: A E G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 45: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D A F E G

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 46: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D A F E G

Stack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 47: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - In-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C B D A F E G

Stack:

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 18 / 34

Page 48: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence:Stack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 49: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence:Stack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 50: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: CStack: A B C

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 51: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: CStack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 52: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D

Stack: A B D

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 53: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B

Stack: A B

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 54: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B

Stack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 55: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 56: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B F

Stack: A E F

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 57: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B F

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 58: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B F G

Stack: A E G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 59: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B F G E

Stack: A E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 60: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B F G E A

Stack: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 61: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Depth-First Search - Post-Order

dfs(Tree t)if t 6= nil then

% pre-order visit of tprint t

dfs(t.left())

% in-order visit of tprint t

dfs(t.right())

% post-order visit of tprint t

A

B

C D

E

F G

Sequence: C D B F G E A

Stack:

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 19 / 34

Page 62: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Esempi di applicazione

Contare nodi – Post-visita

int count(Tree T )

if T ==nil thenreturn 0

elseC` = count(T.left())Cr = count(T.right())return C` + Cr + 1

A

B

C

1

D

1

3

E

F

1

G

1

3

7

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 20 / 34

Page 63: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Esempi di applicazione

Stampare espressioni – In-visita

int printExp(Tree T )

if T.left() ==nil and T.right ==nilthen

print T.read()else

print "("printExp(T.left())print T.read()printExp(T.right())print ")"

*

+

4 9

+

3 4

((4+9) * (3+4))

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 21 / 34

Page 64: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi binari Visite

Costo computazionale

Il costo di una visita di un albero contenente n nodi è ⇥(n), inquanto ogni nodo viene visitato al massimo una volta..

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 22 / 34

Page 65: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Sommario

1 IntroduzioneEsempiDefinizioni

2 Alberi binariIntroduzioneImplementazioneVisite

3 Alberi genericiVisiteImplementazione

Page 66: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici

Specifica (Albero generico)

Tree% Costruisce un nuovo nodo, contenente v, senza figli o genitoriTree(Item v)

% Legge il valore memorizzato nel nodoItem read()

% Modifica il valore memorizzato nel nodowrite(Item v)

% Restituisce il padre, oppure nil se questo nodo è radiceTree parent()

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 23 / 34

Page 67: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici

Specifica (Albero generico)

Tree% Restituisce il primo figlio, oppure nil se questo nodo è una fogliaTree leftmostChild()% Restituisce il prossimo fratello, oppure nil se assenteTree rightSibling()

% Inserisce il sottoalbero t come primo nodo di questo nodoinsertChild(Tree t)

% Inserisce il sottoalbero t come prossimo fratello di questo nodoinsertSibling(Tree t)

% Distruggi l’albero radicato identificato dal primo figliodeleteChild()

% Distruggi l’albero radicato identificato dal prossimo fratellodeleteSibling()

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 24 / 34

Page 68: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici

Esempio: Class Node (Java 8)package org.w3c.dom;

public interface Node {

/** The parent of this node. */

public Node getParentNode();

/** The first child of this node. */

public Node getFirstChild()

/** The node immediately following this node. */

public Node getNextSibling()

/** Inserts the node newChild before the existing child node refChild. */

public Node insertBefore(Node newChild, Node refChild)

/** Adds the node newChild to the end of the list of children of this node. */

public Node appendChild(Node newChild)

/** Removes the child node indicated by oldChild from the list of children. */

public Node removeChild(Node oldChild)

[...]

}

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 25 / 34

Page 69: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Depth-First Search

dfs(Tree t)if t 6= nil then

% pre-order visit of node tprint t

Tree u = t.leftmostChild()while u 6= nil do

dfs(u)u = u.rightSibling()

% post-order visit of node tprint t

A

B

C D

E

F G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 26 / 34

Page 70: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Breadth-First Search

bfs(Tree t)

Queue Q = Queue()Q.enqueue(t)while not Q.isEmpty() do

Tree u = Q.dequeue()% visita per livelli dal nodo uprint uu = u.leftmostChild()while u 6= nil do

Q.enqueue(u)u = u.rightSibling()

A

B

C D

E

F G

Sequence:Queue: A

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 27 / 34

Page 71: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Breadth-First Search

bfs(Tree t)

Queue Q = Queue()Q.enqueue(t)while not Q.isEmpty() do

Tree u = Q.dequeue()% visita per livelli dal nodo uprint uu = u.leftmostChild()while u 6= nil do

Q.enqueue(u)u = u.rightSibling()

A

B

C D

E

F G

Sequence: AQueue: B E

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 27 / 34

Page 72: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Breadth-First Search

bfs(Tree t)

Queue Q = Queue()Q.enqueue(t)while not Q.isEmpty() do

Tree u = Q.dequeue()% visita per livelli dal nodo uprint uu = u.leftmostChild()while u 6= nil do

Q.enqueue(u)u = u.rightSibling()

A

B

C D

E

F G

Sequence: A B

Queue: E C D

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 27 / 34

Page 73: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Breadth-First Search

bfs(Tree t)

Queue Q = Queue()Q.enqueue(t)while not Q.isEmpty() do

Tree u = Q.dequeue()% visita per livelli dal nodo uprint uu = u.leftmostChild()while u 6= nil do

Q.enqueue(u)u = u.rightSibling()

A

B

C D

E

F G

Sequence: A B E

Queue: C D F G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 27 / 34

Page 74: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Breadth-First Search

bfs(Tree t)

Queue Q = Queue()Q.enqueue(t)while not Q.isEmpty() do

Tree u = Q.dequeue()% visita per livelli dal nodo uprint uu = u.leftmostChild()while u 6= nil do

Q.enqueue(u)u = u.rightSibling()

A

B

C D

E

F G

Sequence: A B E C

Queue: D F G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 27 / 34

Page 75: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Breadth-First Search

bfs(Tree t)

Queue Q = Queue()Q.enqueue(t)while not Q.isEmpty() do

Tree u = Q.dequeue()% visita per livelli dal nodo uprint uu = u.leftmostChild()while u 6= nil do

Q.enqueue(u)u = u.rightSibling()

A

B

C D

E

F G

Sequence: A B E C D

Queue: F G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 27 / 34

Page 76: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Breadth-First Search

bfs(Tree t)

Queue Q = Queue()Q.enqueue(t)while not Q.isEmpty() do

Tree u = Q.dequeue()% visita per livelli dal nodo uprint uu = u.leftmostChild()while u 6= nil do

Q.enqueue(u)u = u.rightSibling()

A

B

C D

E

F G

Sequence: A B E C D F

Queue: G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 27 / 34

Page 77: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Visite

Breadth-First Search

bfs(Tree t)

Queue Q = Queue()Q.enqueue(t)while not Q.isEmpty() do

Tree u = Q.dequeue()% visita per livelli dal nodo uprint uu = u.leftmostChild()while u 6= nil do

Q.enqueue(u)u = u.rightSibling()

A

B

C D

E

F G

Sequence: A B E C D F G

Queue:

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 27 / 34

Page 78: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Implementazione

Memorizzazione

Esistono diversi modi per memorizzare un albero, più o meno indicati aseconda del numero massimo e medio di figli presenti.

Realizzazione con vettore dei figli

Realizzazione primo figlio, prossimo fratello

Realizzazione con vettore dei padri

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 28 / 34

Page 79: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Implementazione

Realizzazione con vettore dei figli

P

. . .

P

. .

P P

P

. .

P P

P

.

P

Campi memorizzati nei nodi

parent: reference al nodo padreVettore dei figli: a seconda del numero di figli, puòcomportare una discreta quantità di spazio sprecato

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 29 / 34

Page 80: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Implementazione

Realizzazione basata su Primo figlio, prossimo fratello

Implementato come una lista di fratelli

ParentChild Sibling

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 30 / 34

Page 81: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Implementazione

Implementazione

Tree

Tree parent % Reference al padreTree child % Reference al primo figlioTree sibling % Reference al prossimo fratelloItem value % Valore memorizzato nel nodo

Tree(Item v) % Crea un nuovo nodoTree t = new Treet.value = vt.parent = t.child = t.sibling = nilreturn t

insertChild(Tree t)t.parent = selft.sibling = child % Inserisce t prima dell’attuale primo figliochild = t

insertSibling(Tree t)t.parent = parent

t.sibling = sibling % Inserisce t prima dell’attuale prossimo fratellosibling = t

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 31 / 34

Page 82: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Implementazione

Implementazione

TreedeleteChild()

Tree newChild = child.rightSibling()delete(child)child = newChild

deleteSibling()Tree newBrother = sibling.rightSibling()delete(sibling)sibling = newBrother

delete(Tree t)Tree u = t.leftmostChild()while u 6= nil do

Tree next = u.rightSibling()delete(u)u = next

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 32 / 34

Page 83: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Implementazione

Realizzazione con vettore dei padri

L’albero è rappresentato da un vettore i cui elementi contengono ilvalore associato al nodo e l’indice della posizione del padre nel vettore.

A 0

B 1

E 1

C 2

D 2

F 3

G 3

1

2

3

4

5

6

7

A

B

C D

E

F G

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 33 / 34

Page 84: Algoritmi e Strutture Dati Alberi - cs.unibo.itdonat/05-alberi.pdf · Albero radicato – Definizione 1 Albero radicato (Rooted tree) Un albero consiste di un insieme di nodi e un

Alberi generici Implementazione

DFS (https://xkcd.com/)

Alberto Montresor (UniTN) ASD - Strutture dati 2018/10/19 34 / 34