Salve forum.
Ho un piccolo problema con questo programma che consiste nel costruire un albero binario ordinato inserendo da tastiera una coppia di dati formata da numero e carattere. L'ordinamento va fatto in base al primo numero inserito.
Non ci sono errori sintattici e il programma va in esecuzione, ma si blocca dopo l'inserimento di numero e carattere. le ho provate di tutte ma niente.
Codice:
#include <iostream>
using namespace std;
class nodo
{
private:
int numero;
char carattere;
nodo *sinistra;
nodo *destra;
public:
nodo();
void setInt(int num) {numero=num;};
int getInt(){return numero;};
void setCar(char car) {carattere=car;};
int getCar(){return carattere;};
void pointsx(nodo *point){sinistra=point;};
void pointdx(nodo *point){destra=point;};
nodo *getsx(){return sinistra;};
nodo *getdx(){return destra;};
};
nodo::nodo()
{
numero='1';
carattere='a';
sinistra=NULL;
destra=NULL;
}
class albero
{
private:
nodo *nuovo;
public:
albero();
void inserisci(int numero, char carattere, nodo *temp=NULL);
void visualizza(nodo *temp=NULL);
};
albero::albero()
{
nuovo=NULL;
}
nodo *nuovo, *temp=NULL;
void albero::inserisci(int numero, char carattere, nodo *temp)
{
nodo *newNode;
newNode=new nodo;
newNode->setInt(numero);
newNode->setCar(carattere);
if(temp==NULL)
{
temp=nuovo;
}
if(nuovo=NULL)
{nuovo=newNode;}
else
{
if(newNode->getInt() <= temp->getInt())
{
if(temp->getsx() == NULL)
{
temp->pointsx(newNode);
return;}
inserisci(numero, carattere, temp->getsx());
}
else if(newNode->getInt() > temp->getInt())
{
if(temp->getdx() == NULL)
{
temp->pointdx(newNode);
return;}
inserisci(numero, carattere, temp->getdx());
}
else
cout << "numero già inserito\n";
}
return ;
}
void albero::visualizza(nodo *temp)
{
if(temp != NULL)
{
visualizza(temp->getsx());
cout << temp->getInt() << " " << temp->getCar() << " ";
visualizza(temp->getdx());
}
}
int main()
{
albero *albero1;
albero1=new albero;
int scelta, num, car;
int numero, carattere;
do
{
cout<<"\n";
cout<<"######################################################################\n";
cout<<"# ALBERO BINARIO ORDINATO #\n";
cout<<"######################################################################\n";
cout<<"# Digita 1 per inserire un numero e carattere #\n";
cout<<"# Digita 2 per visualizzare l'albero ordinato #\n";
cout<<"# Digita 3 per uscire #\n";
cout<<"######################################################################\n";
cout<<"\nDigita la tua scelta-->";
cin >> scelta;
switch(scelta)
{
case 1:
cout << "\nInserisci un numero -> ";
cin >> numero;
cout << "\nInserisci un carattere -> ";
cin >> carattere;
albero1->inserisci(numero, carattere, temp);
system ("pause");
system ("cls");
break;
case 2:
if(temp==NULL)
{
cout << "\nNon ci sono elementi nell'albero";
system ("pause");
system ("cls");
break;
}
else
{
cout << "\nL'albero ordinato: \n";
albero1->visualizza(temp);
cout<< "\n";
system ("pause");
system ("cls");
break;
}
default:
cout << "\nINSERISCI UN VALORE CORRETTO\n\n";
break;
}
}while(scelta != 3);
return 0;
}
come risolvete?
Segnalibri