28.15 Die Klasse BinBaum
 
  Wie auch die Klasse Liste, legen wir die Klasse BinBaum abstrakt an, implementieren also lediglich die Ausgaben, während das Einfügen in den Baum in der Klasse BinSuchBaum implementiert wird. Andere Einfügearten könnten dann in einer anderen Klasse implementiert werden. Natürlich lassen sich weitere Ausgabestrategien als zusätzliche Methoden der Klasse BinBaum. zufügen.
Download:
BinBaum.java
package adt;

public abstract class BinBaum {
    public Knoten wurzel;

    public void inOrder() {
        inOrder(wurzel);
    }
    private void inOrder(Knoten knoten){
      if (knoten!= null){
        inOrder(knoten.getLinks());
        System.out.print(knoten.getWert()+",  ");
        inOrder(knoten.getRechts());
      }
    }

    public void preOrder() {
        preOrder(wurzel);
    }
    private void preOrder(Knoten knoten){
      if (knoten!= null){
        System.out.print(knoten.getWert()+",  ");
        preOrder(knoten.getLinks());
        preOrder(knoten.getRechts());
      }
    }

    public void postOrder() {
        postOrder(wurzel);
    }
    private void postOrder(Knoten knoten){
      if (knoten!= null){
        postOrder(knoten.getLinks());
        postOrder(knoten.getRechts());
        System.out.print(knoten.getWert()+",  ");
      }
    }

    public abstract void fuegeInBaum(Object wert);
}
Kommentare Die für unsere Zwecke interessanteste Ausgabe ist die In-Order-Strategie. Dazu ist die Methode inOrder() implementiert. Die Parameterliste ist leer, da beim Aufruf die Wurzel, an der der ganze Baum aufgehängt ist, ja nicht übergeben werden soll. Das Verwalten des Baumes ist schließlich nicht der Job der GUI- bzw. Demo-Klasse. Da aber die Ausgabe rekursiv erfolgt, wobei ein Knoten übergeben werden muss, implementieren wir zusätzlich inOrder(Knoten knoten). Der rekursive Aufruf stoppt, es erfolgt also keine Ausgabe und kein rekursiver Aufruf, wenn der aktuelle Knoten null ist. Die Ausgabe geht so, dass zunächst der linke Teilbaum durch den rekursiven Aufruf von inOrder(getLinks()) abgearbeitet wird, danach erst wird der aktuelle Knoten ausgegeben und schließlich der rechte Teilbaum durch den rekursiven Aufruf von inOrder(getLinks()) abgearbeitet.
Die anderen Ausgabemethoden sind analog konstruiert und müssen deshalb nicht mehr weiter kommentiert werden.

 
zu 28.16 Die Klasse BinSuchBaum
zur Startseite www.pohlig.de  (C) MPohlig 2003