Non ci sto capendo più niente
facendo quella correzione, ho dovuto farne altre, a questo punto il codice intero è così:
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);
}
}
E i 2 errori, entrambi alla riga
codice:
void BilanciaAlbero(treenode* &radice)
{
sono:
(94) : error C2556: 'void __cdecl BilanciaAlbero(struct treenode *& )' : overloaded function differs only by return type from 'struct treenode *__cdecl BilanciaAlbero(struct treenode *& )'
P:\Programmi\Visual C++\MyProjects\Alberi3\sorgente.cpp(11) : see declaration of 'BilanciaAlbero'
(94) : error C2040: 'BilanciaAlbero' : 'void (struct treenode *& )' differs in levels of indirection from 'struct treenode *(struct treenode *& )'
Arabo... maledetto programma