Ciao, ho compilato questo programma sugli alberi binari, e mi escono alcuni errori che non capisco: in particolare mi dice "ambiguous call to overloaded function" riferendosi alla ricorsività nella funzione InsAlbero e nella funzione DistruggiAlbero; a cosa può essere dovuto e come posso risolvere?![]()
Grazie![]()
codice:#include <iostream.h> #include <stdlib.h> struct treenode{ int info; treenode* sx; treenode* dx; }; int ContaNodi(treenode*); treenode* BilanciaAlbero(treenode*); void CreaArray(treenode*,int,int[]); treenode* RicavaAlbero(int,int,int[]); void InsAlbero(treenode*,int); void DistruggiAlbero(treenode*); void StampaAlbero(treenode*); void main() { treenode* albero=NULL; int scelta,n; char end; while(scelta!=0) { system("cls"); cout<<"\n\t\t\tMENU" <<"\n\t|1| Crea albero" <<"\n\t|2| Visualizza albero" <<"\n\t|0| Esci" <<"\n\n\t\tOpzione: "; cin>>scelta; switch(scelta){ case 1: while(n!=0) { cout<<"\n\tElemento: "; cin>>n; InsAlbero(albero,n); } BilanciaAlbero(albero); break; case 2: cout<<"\n\n"; StampaAlbero(albero); cout<<"\n\tPremi un tasto per tornare al menu "; cin>>end; break; } } } void InsAlbero(treenode* &radice,int n) { if(radice==NULL) { radice=new treenode; radice->info=n; radice->sx=NULL; radice->dx=NULL; } else { if(n>radice->info) { if(radice->dx==NULL) { radice->dx=new treenode; radice->dx->info=n; radice->dx->dx=NULL; radice->dx->sx=NULL; } else InsAlbero(radice->dx,n); } else if(n<radice->info) { if(radice->sx==NULL) { radice->sx=new treenode; radice->sx->info=n; radice->sx->dx=NULL; radice->sx->sx=NULL; } else InsAlbero(radice->sx,n); } } } void BilanciaAlbero(treenode* &radice) { int DIM; DIM = ContaNodi(radice); int array = new int[DIM]; int i=0; CreaArray(radice,array,i); DistruggiAlbero(radice); int p=1; int u=DIM; radice=RicavaAlbero(p,u,array); } int ContaNodi(treenode* radice) { int cont=0; if(radice->dx!=NULL) cont=ContaNodi(radice->dx); if(radice->sx!=NULL) cont=ContaNodi(radice->sx); cont++; return cont; } void CreaArray(treenode* radice,int array[],int &i) { if(radice->sx!=NULL) CreaArray(radice->sx,array,i); array[i]=radice->info; i++; if(radice->dx!=NULL) CreaArray(radice->dx,array,i); } void DistruggiAlbero(treenode* &radice) { if(radice!=NULL) { if(radice->sx!=NULL) DistruggiAlbero(radice->sx); if(radice->dx!=NULL) DistruggiAlbero(radice->dx); delete radice; radice=NULL; } } treenode* RicavaAlbero(int primo, int ultimo, int array[]) { int mediana; if(ultimo>=primo) { mediana=(primo+ultimo)/2; treenode* tmp=new treenode; tmp->info=array[mediana]; tmp->sx=RicavaAlbero(primo,mediana-1,array); tmp->dx=RicavaAlbero(mediana+1,ultimo,array); return tmp; } return NULL; } void StampaAlbero(treenode* radice) { if(radice!=NULL) { cout<<"\t"<<radice->info; StampaAlbero(radice->sx); StampaAlbero(radice->dx); } }

Rispondi quotando