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?