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) :
.. E' che non ho compreso bene cosa sia la 'ricorsione'.. uffa!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; }![]()

Ho provato ad implementare il mio primo albero binario (o almeno l'intenzione era quella!) .. Uff.. Credevo fosse un po' più semplice..
) :
Rispondi quotando