# Binärbaum



## drpingoo (20. September 2008)

Hallo zusammen,

ich hätte da ne Frage. Und zwar würde ich gern ein Element einfügen und zwar die Wurzel, aber der Compiler stürzt da immer ab. Er gibt keine Fehler und Warnungen aus, aber wenn ich das Programm starte, wie gesagt, versagt er. Kann mir jemand sagen, wieso, bzw wo da mein Denkfehler liegt? - Danke!

lg


```
#include <iostream>
#include <string>
using namespace std;


int *front=NULL;

struct Baum{

int element;
//int *p;
Baum *links;
Baum *rechts;

};


void frage(){
	string str1 = "eingefuegt";
	string str2 = "geloescht";
	string str3 = "gesucht";
	string eingabe;
	cout << "Soll ein Element eingefügt, gelöscht oder gesucht werden? " << endl;
	cin >> eingabe;
	if(eingabe==str3){
		cout << endl;
		cout << "ok, es wird gesucht" << endl;
	}
	else if(eingabe==str2){
		cout << endl;
		cout << "das Element wird gelöscht" << endl;

	}
	else if(eingabe==str3){

	cout << endl;
	cout << "das Element wird eingefügt" << endl;
	}

	else{
		cout << "sry, eingabe wurde nicht erkannt!" << endl;
		frage();
	}

}

bool suchen(Baum *knoten){
	if(knoten->element==*front){

		return true;}
	else if(knoten->element<*front){
		if(knoten->links!=NULL){
		
			suchen(knoten->links);
		}

		else{
			return false;}
		}

	else{
		if(knoten->rechts!=NULL){
				suchen(knoten->rechts);
		}

		else{
			return false;}

	}

return true;
}


int einfügen(Baum *knoten){
	
	if(front==NULL){
	
	Baum *b = new Baum;
	b->element=knoten->element;
	//b->p=NULL;
	//b->rechts=NULL;
	b->rechts=knoten->rechts;
	//b->links=NULL;
	b->links=knoten->links;
	*front=b->element;
	return b->element;}
	else{

		if(!suchen(knoten)){
			Baum *b = new Baum;
			b=knoten;

		}

	}
	

return 0;}

int main(){

	//frage();
	Baum *bau = new Baum;
	bau->element=8;
	bau->links=NULL;
	bau->rechts=NULL;
		einfügen(bau);

	return 0;}
```


----------



## Matthias Reitinger (20. September 2008)

In Zeile 86 versuchst Du einen Nullzeiger zu dereferenzieren (*front=b->element).


----------



## drpingoo (21. September 2008)

Ah, prima, danke hat funktioniert. Das Problem ist jedoch nun, dass ich den front-Pointer nicht involviert habe. Mein Gedanke war eben, dass, wenn keine Wurzel vorhanden ist, front also auf NULL zeigt, der Knoten da eingefügt wird, und front dann auf den Knoten, bzw. das Element von der Wurzel gesetzt wird, weils ja ein int-Pointer ist. Und danach wollte ich die Fkt.-suche verwenden und immer da dann den nächsten Knoten einfügen, wo die suche false ausgeben würde.


----------

