Prog21 Alberi binari (radicati e ordinati) 1 2 3 4 5 6 7 89 Il figlio destro della radice La radice Il figlio sinistro della radice Il padre del nodo 5.

Slides:



Advertisements
Presentazioni simili
Andrea Zandatutoraggio strutture dati STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°14 albero di ricerca binario.
Advertisements

Ordinamento ottimo Ricerca
Alberi binari Definizione Sottoalberi Padre, figli
Algoritmi e Strutture Dati
RB-alberi (Red-Black trees)
Alberi binari di ricerca
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento Algoritmi e Strutture Dati.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Esercizi su alberi binari
Alberi binari Definizione della struttura dati: struct tree { };
Il problema del dizionario
Algoritmi e Strutture Dati Alberi Binari di Ricerca.
tipo astratto, implementazione, algoritmi
Albero: insieme di punti chiamati NODI e linee chiamate EDGES
Algoritmi e Strutture Dati 20 aprile 2001
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Esercizi su alberi binari
Alberi binari Definizione della struttura dati: struct tree { };
Corso di Informatica 2 a.a. 2003/04 Lezione 6
alberi completamente sbilanciati
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Prog2 a.a. 2001/ Albero binario di ricerca Un albero binario di ricerca é un albero binario in cui ogni nodo ha un’etichetta.
Esercitazioni su alberi
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Esercizi su Alberi.
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Dudo.
Esercitazioni di Prog. II (esercizi su alberi ennari)
Progettare algoritmi veloci usando strutture dati efficienti
Progettare algoritmi veloci usando strutture dati efficienti
Dizionari alberi bilanciati.
Alberi di ricerca di altezza logaritmica
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°7 Prof.ssa Rossella Petreschi
Alberi binari Definizione Sottoalberi Padre, figli
Le postcondizioni specificano l’output della funzione.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Esercitazioni di Prog. II (esercizi _aggiuntivi_su alberi binari)
Lezione n°4 Prof.ssa Rossella Petreschi
K4 è planare? E K3,3 e K5 sono planari? Sì!
Algoritmi e Strutture Dati
Lezione n°11 Prof.ssa Rossella Petreschi
Dizionari alberi bilanciati.
Introduzione agli Algoritmi e alle Strutture Dati
Schema generale, visita in ampiezza e profondità.
Alberi n-ary Lezioni di C.
Algoritmi e Strutture Dati
Progettare algoritmi veloci usando strutture dati efficienti
esercizi alberi binari
comprensione e modifica di codice
Ottimizzazione distribuita
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Algoritmi e Strutture Dati
LINGUAGGIO C Alberi e livelli
Alberi di ricerca Lezione n°4
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Verifica bilanciamento nel numero dei nodi: definizioni.
concetti ed applicazioni
Insiemi disgiunti.
Algoritmi e Strutture Dati
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Transcript della presentazione:

Prog21 Alberi binari (radicati e ordinati) Il figlio destro della radice La radice Il figlio sinistro della radice Il padre del nodo 5 e del nodo 3 Il figlio sinistro del nodo 2 Figlio destro del nodo 5 una foglia

Prog22 Definizione di albero binario (radicato e ordinato) Un albero binario è un insieme finito di nodi. L’insieme può essere vuoto (l’albero vuoto). Ma se l’insieme non è vuoto, allora soddisfa le seguenti regole: 1. C’è un nodo speciale chiamato radice 2. A ogni nodo possono essere associati fino a due nodi diversi, chiamati figlio sinistro e figlio destro. Se un nodo c è il figlio di un nodo p, allora diciamo che p è padre di c. 3. Ogni nodo, eccetto la radice ha esattamente un padre. La radice non ha padre. 4. Passando da un nodo a suo padre, purchè presente, si raggiunge la radice.

Prog23 Alberi binari (radicati e ordinati) Un antenato di 6, come 1 e 5 (il padre) Il sottoalbero destro della radice Il sottoalbero sinistro del nodo 2 Un discendente di 2 una foglia

Prog24 Alberi binari Altezza dell’albero = max livello delle foglie Livello 0 Livello 3 Livello 2 Livello 1 In alcuni testi livello di un nodo = profondità di un nodo Altezza dell’albero = profondità dell’albero

Prog25 Definizione ricorsiva di albero binario: BASE:L’albero vuoto  è un albero binario INDUZIONE: Se t1 e t2 sono alberi binari, e n è un nodo, allora t è un albero binario se ottenuto collegando il nodo n ordinatamente alla radice di t1, se t1 non è vuoto altrimenti t non ha sottoalbero sinistro, e collegando n alla radice di t2 se t2 non è vuoto, altrimenti t ha il sottoalbero destro vuoto. t1t2 n t = t1 è vuoto t2 n

Prog26 L’albero t costruito prendendo come sottoalberi l’albero vuoto e un albero con un solo nodo L’albero t simmetrico al precedente L’albero con un solo nodo, che è anche la sua radice L’albero t costruito prendendo come sottoalberi due alberi con un solo nodo. t1t2 t= L’albero t costruito prendendo come sottoalberi due generici alberi t1, t2, t1 è il sottoalbero sinistro di t e t2 quello destro

Prog Livello 1 Livello 0 Livello 3 Livello 2 Definizione ricorsiva di livello di un nodo: La radice è a livello 0 Se un nodo è a livello n, i suoi figli sono al livello n+1

Prog28 t1t2 t= Alt(  ) = -1 Alt(t) = max(Alt(t1),Alt(t2)) + 1 NumNodi(  ) = 0 NumNodi(t) = NumNodi(t1) + NumNodi(t2) + 1 Esercizio: costruire due funzioni C, alt e numNodi, che ricevendo in input la radice di un albero, restituiscano rispettivamente l’altezza e il numero dei nodi dell’albero e una funizxone che dato un albero e un suo nodo restituisca il livello del nodo.

Prog29 Esempio: cammino da 4 a 6: Un cammino da un nodo n a un nodo m è una sequenza di nodi connessi da archi che portano da n a m. La lunghezza di un cammino è il numero di archi che connettono i nodi del cammino (uno di meno del numero dei nodi). Esempio: il cammino da 4 a 6 ha lunghezza 4. L’altezza può essere anche definita come la massima lunghezza di un cammino radice-foglia, che contiene solo archi da padre a figlio

Prog210 Rappresentazione in memoria di un albero t lPtr rPtr struct tNode { struct tNode *lPtr; int info; struct tNode *rPtr; }; typedef struct tNode TreeNode; typedef TreeNode * TreePtr; = root

Prog211 Visita inorder: visita il sottoalbero sinistro visita la radice visita il sottoalbero destro Esempio: Sequenza nodi visitati :

Prog212 void inOrder(TreePtr tPtr) { if (tPtr) { inOrder(tPtr->lPtr); visit(tPtr); inOrder(tPtr->rPtr); } struct tNode { struct tNode *lPtr; int info; struct tNode *rPtr; }; typedef struct tNode TreeNode; typedef TreeNode * TreePtr;

Prog213 Visita postOrder : visita il sottoalbero sinistro visita il sottoalbero destro visita la radice Visita preOrder : visita la radice visita il sottoalbero sinistro visita il sottoalbero destro Esercizio: Si definisca le funzioni C ricorsive che implementano le visite in postOrder e in preOrder e si definisca una funzione ricorsiva il cui prototipo è void creaAlbBin(TREEPTR *); che costruisce un albero binario radicato nel parametro in input chiedendo all’utente di fornire i valori da inserire nei nodi e se tali valori devono essere nel figlio sinistro o destro.

Prog214 void invInOrder(TREEPTR treePtr, int lev) /* stampa un albero mettendone in evidenza la struttura,*/ /* sfruttando il livello di ogni nodo*/ {int i; if (treePtr != NULL) { lev ++; invInOrder(treePtr->rightPtr,lev); for (i=0;i<(5*lev);i++) printf("%s", " "); visit(treePtr); printf("\n"); invInOrder(treePtr->leftPtr,lev); } Per esempio