Ciao a tutti! Ho provato ad implementare il mio primo albero binario (o almeno l'intenzione era quella!) .. Uff.. Credevo fosse un po' più semplice..
Come metodi della mia classe per ora vorrei solo l'inserimento, la ricerca di un nodo, e la stampa.. Poi nella parte privata ho definito due funzioni che vorrei mi calcolassero l'elemento + a sinistra ed un'altra l'elemento + a destra, perché voglio inserire il nuovo nodo nella prima locazione che risulti = NULL.. Ma l'errore che riscontro è il seguente :

''Cannot convert 'Albero*' to 'Albero::Node*''

Non ho capito bene cosa devo fare.. E' un errore grave? Come potrei risolverlo? Vi posto qui il mio codice (ho preso un po' spunto dalla mia ex-coda ) :

codice:
#include <iostream>
using namespace std;


class Albero {
  private :
    struct Node {  
      int data; 
      Albero* left; 
      Albero* right;
    };
    Node* node;              
    Node* figlio_sinistro();   
    Node* figlio_destro();    
  
  public :   
    Albero() { node = NULL; }
    ~Albero() { node = NULL; }
    int insert(int dato);
	bool Search(int& output);
	int print();
}; 

Albero::Node* Albero::figlio_sinistro() {
  if(node == NULL)
    return NULL;
    
    Node* ret;
    
    for(ret = node; ret->left != NULL; ret = ret->left);
    return ret;
}

Albero::Node* Albero::figlio_destro() {
  if(node == NULL)
    return NULL;
    
    Node* ret;
    
    for(ret = node; ret->right != NULL; ret = ret->right);
    return ret;
}

int Albero::insert(int dato) {
  Node* nuovo;
  Node* radice;
  
  if(nuovo == NULL) {         
    nuovo = new Node;
    nuovo->data = dato;
    radice = nuovo;     
  } else {                     
            nuovo = new Node; 
            nuovo->data = dato;
            
            if(nuovo < radice)
              figlio_sinistro()->left = nuovo;
                else if(nuovo > radice)
                  figlio_destro()->right = nuovo;
                    else
                      return 0;
    }
} 

bool Albero::Search(int& output) {
  Node* temp = node;
  
  while(temp != NULL) {
    if(output == temp->data) {
      cout << "Elemento presente nell'albero!\n";
      return true;
    }
       else {
               cout << "Elemento non trovato!\n";
               return false;
       }
  } 
}

int Albero::print() {
  if(node == NULL)
    cout << "L'albero e' vuoto!\n";
      else {
        cout << "L'albero contiene i seguenti elementi : \n\n";
        cout << node->data << "\n";
        Node* templ = node->left;
          while(templ != NULL) {
            cout << templ->data << "\n";      
            templ = templ->left;
          }
             Node* tempr = node->right;
               while(tempr != NULL) {
                 cout << tempr->data << "\n";
                 tempr = tempr->right;
               }
      } 
}

main() {
  Albero a;
  int scelta;
  
  do {
        cout << "Scegli una delle seguenti opzioni : \n"
                "1 ---> Per inserire nodi all'interno dell'albero;\n"
                "2 ---> Per cercare un nodo;\n"
                "3 ---> Per visualizzare l'albero;\n"
                "0 ---> Per uscire dal programma.\n"
                "Digita un'opzione : ";
        cin >> scelta;
        cout << "\n\n";
        
        switch(scelta) {
          case 1 : 
            int num;
            
            cout << "Inserisci un numero nell'albero : ";
            cin >> num;
            a.insert(num);
          break;
          
          case 2 : 
            int search;
            cout << "Cerca il nodo ---> ";
            cin >> search;
            cout << "\n";
            a.Search(search);
          break;   
          
          case 3 : 
            a.print();
          break;
          
          case 0 : 
            cout << "Exiting program!\n\n";
          break;
          
          default :  
            cout << "Wrong choice!\n\n";
          break;
        }
  } while(scelta != 0);
  
cin.ignore();

cout <<"Premi Invio per uscire... ";
cin.ignore();
return 0;
}
.. E' che non ho compreso bene cosa sia la 'ricorsione'.. uffa!