Referenzen Problem

newbie2009

Bekanntes Mitglied
hey habe folgenden code , mit dem ich theoretisch einen Baum aufbaue, indem ich Knoten hinzufüge, aber wenn ich mit der while-schleife die Tiefe überprüfe erhalte ich stets eine 1 , wobei die nach 3 knoten theoretisch 3 betragen müsste.
Java:
class Baumknoten{
	
	
	private int  zeichen;
	private Baumknoten links, rechts;
	
	
	// erster Konstruktor falls nur ein knoten vorhanden ist 
		public Baumknoten(){
		links =null;
		rechts = null;
		this.zeichen =0;
		}
	
	
	// falls weiter Knoten vorhanden sind
		public Baumknoten(int z, Baumknoten l, Baumknoten r){
			links = l;
			rechts = r;
			zeichen = z;
		}

		public Baumknoten(int z){
			links = null;
			rechts = null;
			this.zeichen = z;
		}
		
		
		// getter Methoden 
public Object getZeichen(){
return zeichen;
}
public Baumknoten getLinks(){
return links;
}
public Baumknoten getRechts(){
return rechts;}

// setter Methoden 

public void setZeichen(int m){
this.zeichen=m;
}

public void setLinks(Baumknoten m){
this.links=m;
}
public void setRechts(Baumknoten m)
{
this.rechts=m;


}




static void einfuegen(Baumknoten vorgänger,Baumknoten nachfolger){
	
	if(vorgänger==null){
		System.out.println(" der baum ist leer");
		return ;
	}
	 nachfolger= new Baumknoten ();

	if(vorgänger.links==null){
		
		vorgänger.links=nachfolger;
		
	}else if(vorgänger.rechts==null){
			
			vorgänger.rechts=nachfolger;
		
	} else {
		System.out.println("beide söhne belegt");
	}
		

	
	
	
}



private static void praeorderAusg(Baumknoten b){
	
		
	
// Rekursiver Durchlauf
		if (b == null){
			return;
		}
System.out.print(b.getZeichen() + "|");
praeorderAusg(b.getLinks());
praeorderAusg(b.getRechts());
	}



static int zähler=0;




public static void main(String []args){
	
	Baumknoten wurzel=  new Baumknoten(1);
	System.out.println(wurzel.getLinks());
	Baumknoten zwei = new Baumknoten(7);
	Baumknoten drei = new Baumknoten(9);
	einfuegen(wurzel,zwei);
	einfuegen(wurzel,zwei);
	einfuegen(wurzel,zwei);
	einfuegen(zwei,drei);
	einfuegen(zwei,drei);
	einfuegen(zwei,drei);
	

	

int cnt=0;
while(wurzel.getLinks()!=null) {cnt++;wurzel=wurzel.getLinks();}
System.out.println(" blaaaaa"+cnt);
	





}



}
referenziere ich etwas falsch oder warum kommt es so?
 
Also ich habe nun nicht wirklich genau hingeschaut aber folgendes würde ich an deiner stelle machen :

Tren deine Funktionen auf Klassen auf.. Du benutzt eine OO-Programmiersprache... nutze das.

Klasse Knoten
Klasse Baum

In der Klasse Knoten nur die Atribute eines Knotens und die get und set methoden.

In der Klasse baum die liste aufbauen und neue knotenobjekte erstellen.

Hat 2 Vorteile:

Du kommst nicht durcheinander und die referenzierung klappt besser.


mach das mal und schau dann wie es läuft...

LG WhiTeY
 
Der Fehler ist der, dass egal was du als parameter bei static void einfuegen(Baumknoten vorgänger,Baumknoten nachfolger) für anchfolger eingibst, du überschreibst den Nachfolger trotzdem immer mit nachfolger = new Baumknoten();

Deshalb fügt er zwar bei einfuegen(wurzel,zwei) einen Knoten an die Wurzel, aber dieser ist nicht zwei.

Somit erstellst du mit einfuegen(zwei,drei) quasi einen neuen Baum.

Also du hast:

wurzel
Buamknoten Baumknoten

und dann

zwei
Buamknoten Baumknoten
 

Zurück
Oben