codice:
#include<iostream.h>
#include<stdlib.h>
//creazione classe...
class albero
{
private:
class ele_albero
{
private:
ele_albero *p_alb_sin;
ele_albero *p_alb_des;
public:
int dato;
friend class albero;
};
public:
ele_albero *p_iniz;
albero::albero()
{
p_iniz = NULL;
}
//Funzioni pubbliche...
albero::ele_albero *albero::inserisci(ele_albero *p_iniz, int num);
void albero::visualizza(ele_albero *p_iniz);
void albero::elimina_foglia(ele_albero *p_iniz);
};
//Funzione di inserimento dati...
albero::ele_albero *albero::inserisci(ele_albero *p_iniz, int num)
{
ele_albero *p = p_iniz;
if(p == NULL)
{
p = new ele_albero;
p->dato = num;
p->p_alb_sin = NULL;
p->p_alb_des = NULL;
}
else
{
if(num < p->dato)
p->p_alb_sin = inserisci(p->p_alb_sin, num); //visita sottoalbero sinistro
else if(num > p->dato)
p->p_alb_des = inserisci(p->p_alb_des, num); //visita sottoalbero destro
}
return p;
}
//Funzione di visualizzazione degli elementi dell'albero...
void albero::visualizza(ele_albero *p_iniz)
{
ele_albero *p = p_iniz;
if(p != NULL)
{
cout<<p->dato<<" ";
visualizza(p->p_alb_sin); //visita sottoalbero sinistro
visualizza(p->p_alb_des); //visita sottoalbero destro
}
}
//Questa funzione cerca tutte le foglie dell'albero e, se l'utente vuole, le
//può cancellare...
void albero::elimina_foglia(ele_albero *ptr_iniz)
{
ele_albero *ptr_sin, *ptr_des;
ptr_sin = ptr_iniz->p_alb_sin;
ptr_des = ptr_iniz->p_alb_des;
if(ptr_sin == NULL && ptr_des == NULL) //è un solo nodo
{
delete p_iniz;
p_iniz = NULL;
cout<<"ELIMINATA RADICE!! ALBERO VUOTO!!\n\n";
}
char risp;
//ramo sinistro
if (ptr_sin != NULL)
if (ptr_sin->p_alb_sin == NULL && ptr_sin->p_alb_des == NULL)
{
cout<<"Trovata foglia: "<<ptr_sin->dato<<". Cancellare?";
cin>>risp;
if(risp=='s')
{
delete ptr_sin;
ptr_iniz->p_alb_sin=NULL;
}
}
else
elimina_foglia(ptr_sin);
//ramo destro
if (ptr_des != NULL)
if (ptr_des->p_alb_sin == NULL && ptr_des->p_alb_des == NULL)
{
cout<<"\nTrovata foglia: "<<ptr_des->dato<<". Cancellare?";
cin>>risp;
if(risp == 's')
{
delete ptr_des;
ptr_iniz->p_alb_des = NULL;
}
}
else
elimina_foglia(ptr_des);
}
void main()
{
int scelta, num;
albero tree;
do
{
cout<<"\n\n\t\t\t GESTIONE ALBERO\n";
cout<<"\n\n\t Digita il numero corrispondente alla funzione da eseguire\n";
cout<<"\n\n1. Inserisci elemento;\n";
cout<<"\t\t\t\t\t\t 2. Elimina elemento;\n";
cout<<"\n3. Visualizza albero;\n";
cout<<"\t\t\t\t\t\t 0. Termina esecuzione;\n";
cout<<"\n\t\t\t FAI LA TUA SCELTA: ";
cin>>scelta;
cout<<"\n";
switch(scelta)
{
case 1: {
do
{
cout<<"\n\n\t\tInserisci elemento (0 per terminare): ";
cin>>num;
if(num != 0)
//attivazione funzione "inserisci"...
tree.p_iniz = tree.inserisci(tree.p_iniz, num);
}
while(num != 0);
cout<<"\n\n";
system("PAUSE");
break;
}
case 2: {
//attivazione funzione "elimina_foglia"...
tree.elimina_foglia(tree.p_iniz);
cout<<"\n\nL'ALBERO RISULTA COSI' COMPOSTO: ";
//attivazione funzione "visualizza"...
tree.visualizza(tree.p_iniz);
cout<<"\n\n";
system("PAUSE");
break;
}
case 3: {
cout<<"\n\nL'ALBERO RISULTA COSI' COMPOSTO: ";
//attivazione funzione "visualizza".
tree.visualizza(tree.p_iniz);
cout<<"\n\n";
system("PAUSE");
break;
}
}
}
while(scelta != 0);
}
Ho trovato questo codice! Secondo voi va bene???