Scusami se approfitto della disponibilità, dopo aver risolto questo ho il problema opposto, cioè ho 2 puntatore che dovrebbero essere non allocati e invece lo sono:
class Nodo_RB{
protected: string parola;
string lemma;
Nodo_RB* padre;
Nodo_RB* figlio_sinistro;
Nodo_RB* figlio_destro;
COLOR colore;
public:
Nodo_RB() {parola=lemma="";
padre=figlio_sinistro=figlio_destro=NULL;
colore=NERO;
}
//~Nodo_RB();
Nodo_RB(Nodo_RB &nuovo) {parola=nuovo.parola;
lemma=nuovo.lemma;
padre=nuovo.padre;
figlio_sinistro=nuovo.figlio_sinistro;
figlio_destro=nuovo.figlio_destro;};
string Ritorna_chiave(){return parola;};
string Ritorna_lemma() {return lemma;};
Nodo_RB* Ritorna_Padre() {return padre;}
Nodo_RB* Ritorna_Figlio_Sinistro() {return figlio_sinistro;};
Nodo_RB* Ritorna_Figlio_Destro() {return figlio_destro;};
COLOR Ritorna_Colore() {return colore;};
void Stampa_Voce() {cout<<"La parola e':"<<parola<<endl;
cout<<"Il lemma corrispondente e':"<<lemma<<endl;
cout<<"Padre: "<<Ritorna_Padre()<<endl;
cout<<"Figlio sx: "<<Ritorna_Figlio_Sinistro()<<endl;
cout<<"Figlio dx: "<<Ritorna_Figlio_Destro()<<endl;}
void Modifica_Colore(COLOR c) {colore=c;};
void Carica_Parola(string p) {parola=p;};
void Carica_Lemma(string l) {lemma=l;};
void Carica_Nodo_Padre(Nodo_RB *pd) {padre=pd;};
void Carica_Nodo_Figlio_Sinistro(Nodo_RB *fs) {figlio_sinistro=fs;};
void Carica_Nodo_Figlio_Destro(Nodo_RB *fd) {figlio_destro=fd;};
};
class Albero_Binario{
protected:
Nodo_RB *Radice;
Nodo_RB *NIL;
public: Albero_Binario() { NIL=Nuovo_Albero(); Radice=NIL;};
void scomponi(Nodo_RB*);
// ~Albero_Binario() {scomponi(Nodo_RB*);};
Nodo_RB* Ricerca_Lemma(Nodo_RB*,string p);
void Ricerca_Lemma1(string);
void Visita_Simmetrica(Nodo_RB*);
// Nodo_RB* Elimina_Nodo(Nodo_RB*,Nodo_RB*,Nodo_RB*);
Nodo_RB* Inserisci_Nodo(string,string);
// Nodo_RB* Successore(Nodo_RB*);
// Nodo_RB* Minimo(Nodo_RB*);
};
Nodo_RB* Albero_Binario::Inserisci_Nodo(string par,string lemma)
{
Nodo_RB *x,*y,*nuovo;//creazione 3 nodi di supporto
y=NIL;//y vuoto
x=Radice; //x la radice
nuovo=Nuovo_Albero(); //creazione nuovo albero
cout<<"sono in inserisci_nodo:carico la parola"<<endl;
nuovo->Carica_Parola(par); //caricamento parola e lemma
nuovo->Carica_Lemma(lemma);
system("PAUSE");
while(x!=NIL)
{ cout<<"nel while"<<endl;
y=x;
system("PAUSE");
if(nuovo->Ritorna_chiave()<x->Ritorna_chiave())
{cout<<"nel while 1"<<endl;
x=x->Ritorna_Figlio_Sinistro();
y=y->Ritorna_Figlio_Destro();
};
nuovo->Carica_Nodo_Padre(y);
if(y==NIL) Radice=nuovo;
else if(nuovo->Ritorna_chiave()<y->Ritorna_chiave())
y->Carica_Nodo_Figlio_Sinistro(nuovo);
else y->Carica_Nodo_Figlio_Destro(nuovo);
cout<<"Alla fine del caricamento"<<endl;
};
Visita_Simmetrica(Radice);
cout<<"Uscita da inserisci_nodo"<<endl;
};
x e y nonostante siano 2 puntatori sono allocati a 0 così non riesco ad entrare mai nel while.
Grazie.