Ganzen BinärBaum ausgeben?


#1
Ich habe folgenden BinärBaum erstellt:
Code:
public class Stammbaum {
   
   
   public static void main(String[] args) {
       // TODO Auto-generated method stub

       BinaryTree <String> abraham = new BinaryTree <String>("Abraham", null, null);
       BinaryTree <String> mona = new BinaryTree <String>("Mona", null, null);           //blätter
       BinaryTree <String> clancy = new BinaryTree <String>("Clancy", null, null);           
       BinaryTree <String> jacky = new BinaryTree <String>("Jacky", null, null);
       
       
       BinaryTree<String> homer = new BinaryTree<String>("homer", abraham, mona);
       BinaryTree<String> marge = new BinaryTree<String>("marge", clancy, jacky);
       BinaryTree<String> lisa = new BinaryTree<String>("lisa", homer, marge);   
}
}
Ich weiß jedoch nicht, wie ich den ganzen Baum (lisa,homer,marge,abraham,...)mit einer Methode ausgeben kann.

Kennt jemand vielleicht eine Methode um dies zu tun?

VG Max
 
#2
Hi

da ich die genauen Methodennamen deiner Klasse nicht kenne: Ich vermute, die Klasse BinaryTree hat Methoden getContent(), getLeftChild(), getRightChild()

Jedenfalls braucht man da eine "rekursive" Methode, die sich also selbst mit anderen Parametern wieder aufruft (und der Unteraufruf dann einen Unterunteraufruf macht usw., und zusätzlich muss mit den Verschachtelungen auch irgendwo Schluss sein)

Wenn man einfach nur einmal alle Namen ausgeben will, ohne eine Hierarchie anzuzeigen, reicht zB. sowas:
Java:
public void printTree(BinaryTree<String> root) {
    //Gibt diesen Knoten und den gesamten Baum darunter aus

    System.out.println(root.getContent()); //Knoten selber

    //Hier kompletten linken Unterbaum ausgeben, aber nur falls er existiert
    BinaryTree<String> left = root.getLeftChild();
    if(left != null) {
        printTree(left);
    }

    BinaryTree<String> right = root.getRightChild();
    if(right != null) {
        printTree(right);
    }
}
Für eine Hierarchie mit zB. Einrückungen, was dann in der Ausgabe prinzipiell so ausschauen sollte
Code:
a
    b
        c
    d
        e
        f
könnte man einen zweiten Methodenparameter haben, und zwar ein int wie viel Leerzeichen vor der Ausgabezeile verwendet werden sollen.
  • Der Anfangsaufruf ist mit 0
  • Die zwei Unteraufrufe in der Methode verwenden den gerade vorhandenen Wert plus 4 (oder 2 oder...)
  • Vor der Zeile mit println werden so viel Leerzeichen ausgegeben, wie in der Variable angegeben