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.
come risolvete?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; }

Rispondi Citando
Segnalibri