ciao a tutti, sto creando la struttura albero binario di ricerca ma ho un problema col costruttore. in pratica l'albero binario di ricerca è una classe derivata di albero binario e implementa ulteriori metodi. in pratica mi viene segnalato un errore al costruttore dell'albero binario di ricerca. posto i codici:
nodoalberop.h
alberobinp.hcodice:#ifndef nodoalberop_h #define nodoalberop_h #include<iostream> #include<stdlib.h> using namespace std; template<class tipoelem> class nodoalberop { public: nodoalberop(); void setpadre(nodoalberop *); void setfigliosx(nodoalberop *); void setfigliodx(nodoalberop *); void setetichetta(tipoelem); nodoalberop *getpadre(); nodoalberop *getfigliosx(); nodoalberop *getfigliodx(); tipoelem getetichetta(); nodoalberop operator=(nodoalberop); int livello; private: nodoalberop *padre; nodoalberop *figliosx; nodoalberop *figliodx; tipoelem etichetta; }; #endif template<class tipoelem> nodoalberop<tipoelem>::nodoalberop() { padre = NULL; figliosx = NULL; figliodx = NULL; etichetta = 0; livello = -1; } template<class tipoelem> void nodoalberop<tipoelem>::setpadre(nodoalberop<tipoelem> *p) { padre = p; } template<class tipoelem> void nodoalberop<tipoelem>::setfigliosx(nodoalberop<tipoelem> *fsx) { figliosx = fsx; } template<class tipoelem> void nodoalberop<tipoelem>::setfigliodx(nodoalberop<tipoelem> *fdx) { figliodx = fdx; } template<class tipoelem> void nodoalberop<tipoelem>::setetichetta(tipoelem elem) { etichetta = elem; } template<class tipoelem> nodoalberop<tipoelem>::nodoalberop<tipoelem> *nodoalberop<tipoelem>::getpadre() { return(padre); } template<class tipoelem> nodoalberop<tipoelem>::nodoalberop<tipoelem> *nodoalberop<tipoelem>::getfigliosx() { return(figliosx); } template<class tipoelem> nodoalberop<tipoelem>::nodoalberop<tipoelem> *nodoalberop<tipoelem>::getfigliodx() { return(figliodx); } template<class tipoelem> tipoelem nodoalberop<tipoelem>::getetichetta() { return(etichetta); } template<class tipoelem> nodoalberop<tipoelem> nodoalberop<tipoelem>::operator=(nodoalberop<tipoelem> node) { this->setpadre(node.getpadre()); this->setfigliosx(node.getfigliosx()); this->setfigliodx(node.getfigliodx()); this->setetichetta(node.getetichetta()); }
codice:#ifndef alberobinp_h #define alberobinp_h #include "nodoalberop.h" #include<assert.h> #include<iostream> #include<stdlib.h> using namespace std; template<class tipoelem> class alberobinp { public: typedef nodoalberop<tipoelem> *nodo; alberobinp(); void creabinalbero(); bool binalberovuoto(); nodo binradice(); nodo binpadre(nodo); nodo figliosx(nodo); nodo figliodx(nodo); bool sxvuoto(nodo); bool dxvuoto(nodo); tipoelem legginodo(nodo); void scrivinodo(nodo, tipoelem); void insbinradice(nodo); void insfigliosx(nodo); void insfigliodx(nodo); void cancsottoalbero(nodo); protected: nodo radice; }; #endif template<class tipoelem> alberobinp<tipoelem>::alberobinp() { this->creabinalbero(); } template<class tipoelem> void alberobinp<tipoelem>::creabinalbero() { radice = NULL; } template<class tipoelem> bool alberobinp<tipoelem>::binalberovuoto() { return(radice == NULL); } template<class tipoelem> typename alberobinp<tipoelem>::nodo alberobinp<tipoelem>::binradice() { assert(!this->binalberovuoto()); return(radice); } template<class tipoelem> typename alberobinp<tipoelem>::nodo alberobinp<tipoelem>::binpadre(typename alberobinp<tipoelem>::nodo node) { assert(!this->binalberovuoto() && (node != radice)); return(node->getpadre()); } template<class tipoelem> typename alberobinp<tipoelem>::nodo alberobinp<tipoelem>::figliosx(typename alberobinp<tipoelem>::nodo node) { assert(!this->binalberovuoto() && !this->sxvuoto(node)); return(node->getfigliosx()); } template<class tipoelem> typename alberobinp<tipoelem>::nodo alberobinp<tipoelem>::figliodx(typename alberobinp<tipoelem>::nodo node) { assert(!this->binalberovuoto() && !this->dxvuoto(node)); return(node->getfigliodx()); } template<class tipoelem> bool alberobinp<tipoelem>::sxvuoto(typename alberobinp<tipoelem>::nodo node) { assert(!this->binalberovuoto()); return(node->getfigliosx() == NULL); } template<class tipoelem> bool alberobinp<tipoelem>::dxvuoto(typename alberobinp<tipoelem>::nodo node) { assert(!this->binalberovuoto()); return(node->getfigliodx() == NULL); } template<class tipoelem> tipoelem alberobinp<tipoelem>::legginodo(typename alberobinp<tipoelem>::nodo node) { return(node->getetichetta()); } template<class tipoelem> void alberobinp<tipoelem>::scrivinodo(typename alberobinp<tipoelem>::nodo node, tipoelem elem) { node->setetichetta(elem); } template<class tipoelem> void alberobinp<tipoelem>::insbinradice(typename alberobinp<tipoelem>::nodo node) { assert(this->binalberovuoto()); radice = node; } template<class tipoelem> void alberobinp<tipoelem>::insfigliosx(typename alberobinp<tipoelem>::nodo node) { assert(!this->binalberovuoto() && this->sxvuoto(node)); nodo temp = new nodoalberop<tipoelem>; node->setfigliosx(temp); temp->setpadre(node); } template<class tipoelem> void alberobinp<tipoelem>::insfigliodx(typename alberobinp<tipoelem>::nodo node) { assert(!this->binalberovuoto() && this->dxvuoto(node)); nodo temp = new nodoalberop<tipoelem>; node->setfigliodx(temp); temp->setpadre(node); } template<class tipoelem> void alberobinp<tipoelem>::cancsottoalbero(alberobinp<tipoelem>::nodo node) { if(node->getfigliosx() != NULL) this->cancsottoalbero(node->getfigliosx()); if(node->getfigliodx() != NULL) this->cancsottoalbero(node->getfigliodx()); if(node == this->binradice()) radice = NULL; delete node; }
segue--->

Rispondi quotando