# Problem bei einer Baumausgabe auf der Konsole



## moguai (11. Apr 2010)

Hallo zusammen,
ich habe ein Problem bei einer Aufgabe. Zur Aufgabenstellung:
Also generell ging es darum eine Klasse zu schreiben, die einen Datentyp enthält (in diesem Fall int) und zusätzlich noch 2 Referenzen auf den linken und rechten Teilbaum. Das war auch alles kein Problem. Nun soll jedoch die Ausgabe auf der Konsole erfolgen.
Mit einer Methode müssen also die linken und rechten Referenzen rekursiv durchgegangen und ausgegeben werden. Mein Problem liegt nicht in dem durchgehen, sondern in der gewünschten Ausgabe. Hier mal ein Link wie die Ausgabe aussehen soll.







Ein "|" soll den linken Teilbaum darstellen, der rechte hat ein einfaches Leerzeichen. Ich check nicht, wie man sich die Leerzeichen und "|" Striche merken soll. Habe es schon mit Countern probiert, aber komme da nicht richtig weiter.
Hier ein wenig Fummel-Code von mir:


```
private void printTreeGraph() {
		System.out.println("-"+value);
		if(left != null) {
			
			for(int i=0;i<=counterLeft;i++) {
				System.out.print(" |");
			}
			counterLeft++;
			left.printTreeGraph();
			counterLeft--;
		}
		if(right != null) {
			for(int i=0;i<=counterRight;i++) {
				System.out.print(" ");
			}
			counterRight++;
			right.printTreeGraph();
			counterRight--;
		}
		if (left != null && right != null) {
		}
	}
```

Die Ausgabe sieht dann so aus:


```
Baumdarstellung:
-5
 |-8
 | |-3
 -2
 | |-4
  -0
   -7
 -6
 |-1
  -9
```

Wäre sehr dankbar über ein paar Ratschläge.

mfg
moguai


----------



## SlaterB (12. Apr 2010)

sieht schon ziemlich gut aus, ganz abstrakt ist das schwer zu verbessern,
hättest du noch die Tree-Klasse, ne main-Methode usw. gepostet (wenn der Rest des Programms funktioniert, können es auch ruhig mal 300 Zeilen sein), 
dann könnte man jetzt testen warum bei "-2" der erste Strich fehlt,
wahrscheinlich wird counterLeft zu oft gesenkt, hat vielleicht mit leeren Links + Rechts unter 3 zu tun,

nur mit einem counter wirst du aber wahrscheinlich letztlich nicht hinkommen,
eine Möglichkeit wäre, einen String die ganze Zeit den aktuellen Prefix enthalten zu lassen,
jede Rekursions-Ebene muss dabei nur für sich nötiges anfügen und später entfernen, ohne den Rest des Strings zu kennen


----------



## Marco13 (12. Apr 2010)

http://www.java-forum.org/java-basi...thode-um-struktur-binaebaumes-auszugeben.html


----------



## moguai (12. Apr 2010)

Ein Traum! Danke!


----------

