:Knoten in Binärbaum löschen
-
Hallo,
habe ein kleines Programm für Binärbaumerstellung, das einfache Löschen funktioniert noch nicht. Habe das Problem eines Ausnahmefehlers bei der Verbindung Eltern-Enkel-Knoten.
Hoffe, jemand könnte mir helfen und im Voraus schon vielen Dank.struct satz{ char name[15]; int position; }; struct knoten{ satz markierung;knoten *links; knoten *rechts;knoten *oben; }; extern knoten *wurzel = new knoten; extern int indexpos = 1; int eingabe(knoten* k); int einfuegen(knoten*& baum, knoten* neu); int loescheKnoten(knoten* k); int loesche1(knoten* k); int initKnoten(knoten* k, char m[15]){ strcpy(k->markierung.name,m); k->markierung.position=indexpos; k->links=NULL;k->rechts=NULL; k-oben=NULL; return 0;} int main(){ char wahl; knoten* wurzel = new knoten; initKnoten(wurzel,""); strcpy(wurzel->markierung.name,"Wurzel_leer"); do{ cout << endl; cout << " Eingabe ... e" << endl; cout << " Loeschen ... l" << endl; cout << " Ende ... q" << endl; cout << " Waehlen Sie! "; cin >> wahl; switch(wahl){ case 'e' : eingabe(wurzel);break; case 'l' : loescheKnoten(wurzel);break; default : cout << "Programmende."; } } while(wahl !='q'); return 0; } int eingabe(knoten* k){ char key[15]; cout << endl << "Namen eingeben ... "; cout.flush(); gets(key); if(strcmp(k->markierung.name,"Wurzel_leer") == 0) initKnoten(k,key); else{ knoten *neu = new knoten; initKnoten(neu,key); einfuegen(k,neu); } indexpos++; return 0; } int einfuegen(knoten*& baum, knoten* neu){ if(baum==NULL){ baum = neu;} else{ if(strcmp(neu->markierung.name,baum->markierung.name)<0){ einfuegen(baum->links,neu);} else { einfuegen(baum->rechts,neu);} } return 0; } int loescheKnoten(knoten* k){ loesche1(k); //loeschen eines Knotens mit einem Nachfolger return 0; } int loesche1(knoten* k){ char key[15]; cout << endl << "Namen eingeben ... "; cout.flush();gets(key); knoten* enkel = new knoten; initKnoten(enkel,key); if(k->links == NULL) enkel = k->links; else enkel = k->rechts; //if(k->oben==NULL) //Pruefen, ob k evtl Wurzel //enkel = k;return; //ab hier klar, dass Elternknoten von k ist vorhanden knoten* eltern = k->oben; //Verbinde Elternknoten zum Enkel if(eltern->links == k) //!!! Ausnahmefehler !!! eltern->links=enkel; else eltern->rechts=enkel; //Verbinde Enkel zum elternknoten if(enkel!=NULL) enkel->oben = eltern; return 0; }