Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoBaldassare Bini Modificato 11 anni fa
1
Andrea Zandatutoraggio strutture dati 3-5-20041 STRUTTURE DATI e LABORATORIO II ESERCITAZIONE N°14 albero di ricerca binario
2
Andrea Zandatutoraggio strutture dati 3-5-20042 TESTO ESERCITAZIONE Scrivere un algoritmo C che implementi la struttura albero di ricerca binario. Il programma deve prevedere le funzioni di inserimento, cancellazione, visualizzazione e ricerca. Il campo chiave è costituito da una stringa. Suggerimento. Per semplicità si supponga che ogni dato sia una stringa che ne costituisce la chiave. Per visualizzare i dati utilizzare gli algoritmi che visitano lalbero. Implementare inoltre sia lalgoritmo di ricerca ricorsivo che quello iterativo.
3
Andrea Zandatutoraggio strutture dati 3-5-20043 ALBERI DI RICERCA BINARI Un albero di ricerca binario offre delle prestazioni migliori di quelle delle strutture dati finora studiare, quando le operazioni da svolgere sono linserimento, la cancellazione e la ricerca di elementi arbitrari. Definizione: Un albero di ricerca binario è un albero binario che soddisfa le seguenti proprietà: 1) Ogni elemento ha una chiave e le chiavi sono uniche. 2) Le chiavi in un sottoalbero sinistro non vuoto devono essere più piccole della chiave nella radice del sottoalbero. 3) Le chiavi in un sottoalbero destro non vuoto devono essere più grandi della chiave nella radice del sottoalbero. 4) Anche i sottoalberi sinistro e destro sono alberi di ricerca binari
4
Andrea Zandatutoraggio strutture dati 3-5-20044 ALBERI DI RICERCA BINARI 30 5 2 40 ESEMPIO DI ALBERO DI RICERCA BINARIO:
5
Andrea Zandatutoraggio strutture dati 3-5-20045 INSERIMENTO Per inserire un nuovo elemento dobbiamo prima verificare che il valore di chiave sia diverso da quelli degli elementi esistenti. Per fare questo utilizziamo una funzione di ricerca: Se lalbero è vuoto o se il valore della chiave è presente viene fornito NULL, in caso contrario la funzione fornisce un puntatore allultimo dellalbero che è stato incontrato durante la ricerca. Il nuovo elemento deve essere inserito come figlio di questo nodo.
6
Andrea Zandatutoraggio strutture dati 3-5-20046 INSERIMENTO 30 5 2 40 ESEMPIO DI INSERIMENTO: 80
7
Andrea Zandatutoraggio strutture dati 3-5-20047 30 5 2 40 ESEMPIO DI INSERIMENTO: 35 80 INSERIMENTO 35
8
Andrea Zandatutoraggio strutture dati 3-5-20048 INSERIMENTO Algoritmo
9
Andrea Zandatutoraggio strutture dati 3-5-20049 CANCELLAZIONE CANCELLAZIONE DI UN NODO TERMINALE: 30 5 2 40 80 35
10
Andrea Zandatutoraggio strutture dati 3-5-200410 CANCELLAZIONE DI UN NODO NON TERMINALE CON UN SOLO FIGLIO: 30 5 2 40 80 40 CANCELLAZIONE
11
Andrea Zandatutoraggio strutture dati 3-5-200411 CANCELLAZIONE DI UN NODO NON TERMINALE CON UN SOLO FIGLIO: 30 5 2 80 40 CANCELLAZIONE
12
Andrea Zandatutoraggio strutture dati 3-5-200412 CANCELLAZIONE CANCELLAZIONE DI UN NODO NON TERMINALE CON DUE FIGLI: 40 20 10 60 50 45 70 55 52
13
Andrea Zandatutoraggio strutture dati 3-5-200413 CANCELLAZIONE DI UN NODO NON TERMINALE CON DUE FIGLI: 40 20 10 55 60 50 45 70 52 CANCELLAZIONE
14
Andrea Zandatutoraggio strutture dati 3-5-200414 CANCELLAZIONE Algoritmo
15
Andrea Zandatutoraggio strutture dati 3-5-200415 if ( p!=NULL && strcmp(item, p->dati)==0) { if (node->destro==NULL) node = node->sinistro; else if (node->sinistro==NULL)node=node->destro; else { tmp = node->sinistro; previous = node; while (tmp->destro!=NULL) { previous = tmp; tmp = tmp->destro; } strcpy(node->dati, tmp->dati); if (previous==node)previous->sinistro = tmp->sinistro; else previous->destro = tmp->sinistro; } if (p==*root)*root = node; else if (prev->sinistro == p) prev->sinistro = node; else prev->destro = node; } 40 20 10 prev p node node = NULL CANCELLAZIONE CANCELLAZIONE DI UN NODO TERMINALE: 10
16
Andrea Zandatutoraggio strutture dati 3-5-200416 if ( p!=NULL && strcmp(item, p->dati)==0) { if (node->destro==NULL) node = node->sinistro; else if (node->sinistro==NULL)node=node->destro; else { tmp = node->sinistro; previous = node; while (tmp->destro!=NULL) { previous = tmp; tmp = tmp->destro; } strcpy(node->dati, tmp->dati); if (previous==node)previous->sinistro = tmp->sinistro; else previous->destro = tmp->sinistro; } if (p==*root)*root = node; else if (prev->sinistro == p) prev->sinistro = node; else prev->destro = node; } 40 20 10 p node CANCELLAZIONE DI UN NODO NON TERMINALE CON UN SOLO FIGLIO: 20 CANCELLAZIONE prev node
17
Andrea Zandatutoraggio strutture dati 3-5-200417 if ( p!=NULL && strcmp(item, p->dati)==0) { if (node->destro==NULL) node = node->sinistro; else if (node->sinistro==NULL)node=node->destro; else { tmp = node->sinistro; previous = node; while (tmp->destro!=NULL) { previous = tmp; tmp = tmp->destro; } strcpy(node->dati, tmp->dati); if (previous==node) previous->sinistro = tmp->sinistro; else previous->destro = tmp->sinistro; } if (p==*root)*root = node; else if (prev->sinistro == p) prev->sinistro = node; else prev->destro = node; } 40 20 10 p node CANCELLAZIONE DI UN NODO NON TERMINALE CON DUE FIGLI: 20 prev CANCELLAZIONE 25 tmp previous
18
Andrea Zandatutoraggio strutture dati 3-5-200418 RICERCA La funzione di ricerca fornisce un puntatore al nodo che contiene la chiave che stiamo cercando, oppure se tale nodo non esiste fornisce NULL. Algoritmo ricorsivo Algoritmo iterattivo
19
Andrea Zandatutoraggio strutture dati 3-5-200419 La visualizzazione può essere implementata con vari algoritmi: preorder, inorder, postorder, level_order. La visualizzazione inorder ci visualizzerà gli elementi con le chiavi ordinate. VISUALIZZAZIONE eseguibile
20
Andrea Zandatutoraggio strutture dati 3-5-200420 SITO SLIDES web.tiscali.it/ANDREAZ
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.