giusto io una prima bozza ce l ho e la scrivo:
codice:
void ordina(struct nodo *rad, struct nodo *pr)
{
printf("\nINIZIO\n");
struct nodo *temp=NULL,*prec=NULL;
if(rad->sinistro!=NULL && rad->destro!=NULL)
{
if(rad->info < rad->sinistro->info)
{
temp=(struct nodo *)malloc(sizeof(struct nodo));
temp->info=rad->info;
rad->info=rad->sinistro->info;
rad->sinistro->info=temp->info;
free(temp);
ordina(rad,pr);
}
if(rad->info > rad->destro->info)
{
temp=(struct nodo *)malloc(sizeof(struct nodo));
temp->info=rad->info;
rad->info=rad->destro->info;
rad->destro->info=temp->info;
free(temp);
ordina(rad,pr);
}
ordina(rad->sinistro,pr);
ordina(rad->destro,pr);
if(pr->info < rad->sinistro->info)
{
temp=(struct nodo *)malloc(sizeof(struct nodo));
temp->info=pr->info;
pr->info=rad->sinistro->info;
rad->sinistro->info=temp->info;
free(temp);
ordina(rad->sinistro,pr);
ordina(rad->destro,pr);
}
else if(pr->info > rad->destro->info)
{
temp=(struct nodo *)malloc(sizeof(struct nodo));
temp->info=pr->info;
pr->info=rad->destro->info;
rad->destro->info=temp->info;
free(temp);
ordina(rad->sinistro,pr);
ordina(rad->destro,pr);
}
else
{
ordina(rad->sinistro,pr);
ordina(rad->destro,pr);
}
}
}
il problema e che quando entro nella parte destra dell albero e vado a cercare l elemento minore della radice siccome ho laa condizione chegli elementi del sottoalbero sinistro devono essere minore della radice non mi fa lo scambio,non so se sono stato chiaro ma nel caso in cui qualcuno abbia capito come posso risolvere questo problema?