Tiefensuche im binären Baum

Status
Nicht offen für weitere Antworten.

hawkeye78

Bekanntes Mitglied
Hallo,

ich hab ein kleines Problem, ich versuche auf einem binären Baum eine Tiefensuche zu implementieren. Hierbei soll zunächst immer der Linke Knoten besucht werden, bis ein Blatt erreicht worden ist. Danach soll ein Backtracking erfolgen und die passierten rechten Teilbäume aufgesucht werden, in welchen dann wieder die linken Kanten besucht werden soll bis ein Blatt erreicht worden ist usw.
Meine Implementierung des Baumes schaut im moment so aus, das die Knoten als Objekte gespeichert werden. Ein Knoten enthält hierbei zwei Referenzen auf den linken bzw. rechten Teilbaum. Das eigentliche gespeicherte Datum, sowie ein boolean der auf False steht falls der Knoten noch nicht betrachtet worden ist, und auf true falls der Knoten besucht worden ist
Mein Code für die Tiefensuche schaut im moment so aus:
Code:
// Aufruf der Tiefensuche mit dem Wurzeldatum
	public void dfs()
	{
		this.dfs(head);
	}
	
	public void dfs(Knoten akt)
	{
		// Falls der Knoten nocht nicht betrachtet worden ist
		if(!akt.getVisited())
		{
			akt.isVisited();  // Der Knoten wurde somit besucht
			System.out.print("Betrachteter Knoten "+akt.getValue());
			
			// Ausgabe des Linken Kindes, falls vorhanden
			if(akt.getLeftChild()!=null)
			{
				System.out.println();
				System.out.println("linkes Kind: "+akt.getLeftChild().getValue());
			}
			
			// Ausgabe des rechten Kindes falls vorhanden
			if(akt.getRightChild()!=null)
			{
				System.out.println("rechtes Kind: "+akt.getRightChild().getValue());				
			}
			
			if(akt.getLeftChild()==null && akt.getRightChild()==null)
			{
				System.out.println(": Blatt");
			}
			System.out.println();
		}

		// Besuch des linken Kindes falls es noch nicht betrachtet worden ist
		if(akt.getLeftChild()!=null && akt.getLeftChild().getVisited()==false)
		{
			this.dfs(akt.getLeftChild());
		}
		// Besuch des rechten Kindes falls noch nicht betrachtet worden ist
		else if(akt.getRightChild()!=null && akt.getRightChild().getVisited()==false)
		{
			this.dfs(akt.getRightChild());
		}
		// Backtracking
		else if(akt.getLeftChild()==null && akt.getRightChild()==null)
		{
			return;
		}
	}
und ich wäre sehr dankbar wenn evtl. mal jemand über den Quellcode schauen kann, und mir sagen kann wo mein Fehler liegt. Da ich im moment nur an der "äußeren" linken Kante bis zum Blatt laufe und dort die Tiefensuche abbricht bzw. dann das Backtracking beginnt und die rechten Teilbäume gar nicht aufgesucht werden.
 
B

Beni

Gast
Code:
      // Besuch des linken Kindes falls es noch nicht betrachtet worden ist
      if(akt.getLeftChild()!=null && akt.getLeftChild().getVisited()==false)
      {
         this.dfs(akt.getLeftChild());
      }
      // Besuch des rechten Kindes falls noch nicht betrachtet worden ist
      else if(akt.getRightChild()!=null && akt.getRightChild().getVisited()==false)
      {
         this.dfs(akt.getRightChild());
      }
      // Backtracking
      else if(akt.getLeftChild()==null && akt.getRightChild()==null)
      {
         return;
      }

Du hast ein paar else's zuviel. "Wenn das linke da ist, dann besuche es, sonst besuche das rechte (falls es existiert)" steht bei dir.

Das letzte if, mit dem return drin, ist überflüssig. Zurückkehren tut man immer.
 

hawkeye78

Bekanntes Mitglied
Hallo Beni,

vielen Dank für deine Antwort, ich habe nun den Quellcode ein klein bißchen modifziert, so das er wie folgt aussieht
Code:
		// Besuch des linken Kindes falls es noch nicht betrachtet worden ist
		if(akt.getLeftChild()!=null && akt.getLeftChild().getVisited()==false)
		{
			this.dfs(akt.getLeftChild());
		}
		// Besuch des rechten Kindes falls noch nicht betrachtet worden ist
		else if(akt.getRightChild()!=null && akt.getRightChild().getVisited()==false)
		{
			this.dfs(akt.getRightChild());
		}
				
		return;

Leider verändert das nichts an der Ausgabe. Vielleicht bin ich einfach nur blind :(
Viele grüsse
Dan

Edit:
Hat sich erledigt ich muß aus dem if...else if.... Statement zwei If-Abfragen man....dann geht es...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q Tiefensuche Graph -> Schulprojekt Java Basics - Anfänger-Themen 1
F Graph Tiefensuche Methode Java Basics - Anfänger-Themen 7
U Best Practice Graphen Tiefensuche Klassifizierung von Kanten "B","C","F" Java Basics - Anfänger-Themen 2
4 Stack over flow bei rekursiver Tiefensuche Java Basics - Anfänger-Themen 5
E Erste Schritte brauche hilfe zum verstehen einer Klasse(Tiefensuche) Java Basics - Anfänger-Themen 17
A Tiefensuche in Graph Java Basics - Anfänger-Themen 4
Luk10 Frage zur Tiefensuche Java Basics - Anfänger-Themen 20
Luk10 Frage zu Graph Tiefensuche Java Basics - Anfänger-Themen 4
kirchrath Wegpunkt wird nicht zur History einer Tiefensuche hinzugefügt Java Basics - Anfänger-Themen 2
K Tiefensuche Java Basics - Anfänger-Themen 2
S Tiefensuche Probleme - Der "Rücksprung" Java Basics - Anfänger-Themen 4
G Mit der Tiefensuche alle Wege finden Java Basics - Anfänger-Themen 2
S [EDIT] Tiefensuche / Depth-First-Search / Greedy Algorithmus Java Basics - Anfänger-Themen 6
M Graphen (Tiefensuche) Java Basics - Anfänger-Themen 2
L Binären Bäume für beliebige Datentypen Java Basics - Anfänger-Themen 15
M Binären Baum Kinder setzen Java Basics - Anfänger-Themen 12
U Input/Output Elemente eines Binären Suchbaums ausgeben Java Basics - Anfänger-Themen 10
C Methoden Methode zu einem Binären Suchbaum Java Basics - Anfänger-Themen 8
L Indorder Traversierung eines binären Suchbaumes Java Basics - Anfänger-Themen 1
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
N Binären Suchbaum erstellen, nachzuvollziehen Java Basics - Anfänger-Themen 0
W binären Suchbaum Kantenanzahl Java Basics - Anfänger-Themen 3
K Datentypen Umwandlung einer Textfeldeingabe in einen binären Wert Java Basics - Anfänger-Themen 2
J Ebene eines binären Baumes Java Basics - Anfänger-Themen 3
N Tiefe im binären Suchbaum Java Basics - Anfänger-Themen 9
A OOP Binären Datenstrom in Datei schreiben Java Basics - Anfänger-Themen 4
E Alternativen zur binären Serialisierung ? Java Basics - Anfänger-Themen 9
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
G Pfadlänge eines binären Suchbaums Java Basics - Anfänger-Themen 4
G suchen und ersetzen in einer binären Datei Java Basics - Anfänger-Themen 4
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
L Binären Baum speichern Java Basics - Anfänger-Themen 6
J String in binären Baum umwandeln Java Basics - Anfänger-Themen 7
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
G AVL-Baum Java Basics - Anfänger-Themen 1
G Rot-Schwarz-Baum Java Basics - Anfänger-Themen 8
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Interface Baum visualisieren Java Basics - Anfänger-Themen 37
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
E Baum pfadweise durchlaufen Java Basics - Anfänger-Themen 11
O Naives links rechts einfügen in ADT Baum Java Basics - Anfänger-Themen 8
L Traversierungsverfahren Baum: LevelOrder Java Basics - Anfänger-Themen 17
L Rekursion im Baum Java Basics - Anfänger-Themen 9
L Baum Knoten zählen Java Basics - Anfänger-Themen 6
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
D B-Baum einfügen und löschen Java Basics - Anfänger-Themen 2
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
D Werte AVL-Baum löschen Java Basics - Anfänger-Themen 2
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 4
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 0
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
R Baum erzeugen Java Basics - Anfänger-Themen 61
B Baum Traversierung Postorder Java Basics - Anfänger-Themen 6
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
A Voller Baum Java Basics - Anfänger-Themen 7
S n-ärer Baum Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
C kompletter baum Java Basics - Anfänger-Themen 2
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
M Baum Code kurze frage ... Java Basics - Anfänger-Themen 6
D Ein Objekt in einem Baum finden und ausgeben. Java Basics - Anfänger-Themen 4
K Rot-Schwarz-Baum min und max-Tiefe Java Basics - Anfänger-Themen 1
A min() Methode Baum Java Basics - Anfänger-Themen 1
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
J Baum Knoten löschen Java Basics - Anfänger-Themen 10
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
Screen 2,4 Baum Frage Java Basics - Anfänger-Themen 6
T Rot-schwarz Baum Problem Java Basics - Anfänger-Themen 3
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
C 2-3 Baum Java Basics - Anfänger-Themen 6
H Baum Java Basics - Anfänger-Themen 4
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
L eigenen Baum schreiben Java Basics - Anfänger-Themen 5
Luk10 Anzahl der Knoten in einem Baum ausgeben! Java Basics - Anfänger-Themen 6
T Array in einen Baum zu überführen Java Basics - Anfänger-Themen 3
S Das reinschreiben einer Klasse in den Baum Java Basics - Anfänger-Themen 6
H B-Baum: Knoten Position als Parameter oder als Variable im Objekt? Java Basics - Anfänger-Themen 4
A Baum mit geometricfigur Werte Java Basics - Anfänger-Themen 6
D Datentypen Einfügen im RotSchwarz Baum Java Basics - Anfänger-Themen 2
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
G List als Rückgabewert einer rekursiven Methode (Baum) Java Basics - Anfänger-Themen 3
I Baum graphisch darstellen Java Basics - Anfänger-Themen 2
P Binärer Baum mit Composite-Entwurfsmuster Java Basics - Anfänger-Themen 2
L Baum Swing AVL Java Basics - Anfänger-Themen 4
Binary.Coder 2-3-4 Baum vs. (2,4) Baum Java Basics - Anfänger-Themen 2
ModellbahnerTT Ab-Baum Applet Java Basics - Anfänger-Themen 3
P Baum-Menü in Java Java Basics - Anfänger-Themen 5
H Baum Java Basics - Anfänger-Themen 11
G AVL Baum Java Basics - Anfänger-Themen 20
J Baum spiegeln Java Basics - Anfänger-Themen 7
N 2-3 Baum, Einfügen Java Basics - Anfänger-Themen 5
G Rekursion mit Return - Baum durchlaufen Java Basics - Anfänger-Themen 4
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
V Baum mit log n Aufwand für Einfügen und Löschen und. Java Basics - Anfänger-Themen 5
P Problem mit Darstellung im Baum Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben