//als erste diese Klasse
class Knoten {
// Nutzdaten
private int info ;
// Verwaltungsdaten
private Knoten left_ref ;
private Knoten right_ref ;
public Knoten (int info) {
this.info = info ;
left_ref = null ;
right_ref = null ;
} // endmethod Knoten
public int getInfo () {
return info ;
} // endmethod getInfo
public Knoten getLeft () {
return left_ref ;
} // endmethod getLeft
public Knoten getRight () {
return right_ref ;
} // endmethod getRight
public void setLeft (Knoten left_ref) {
this.left_ref = left_ref ;
} // endmethod setLeft
public void setRight (Knoten right_ref) {
this.right_ref = right_ref ;
} // endmethod setRight
public void printInfo () {
System.out.print ("Nutzdaten des Knoten: ");
System.out.println (info) ;
} // endmethod printInfo
} // endclass Knoten
//danach den Binärbaum
class Suchbaum {
private Knoten wurzel_ref ;
public Suchbaum () {
wurzel_ref = null ;
} // endmethod Suchbaum
private void add (Knoten knoten_ref, Knoten neu_ref) {
if (neu_ref.getInfo () <= knoten_ref.getInfo ()) {
// weiter im linken Teilbaum
if (knoten_ref.getLeft () == null) {
knoten_ref.setLeft (neu_ref) ;
} else {
add (knoten_ref.getLeft (), neu_ref) ;
}
} else {
// weiter im rechten Teilbaum
if (knoten_ref.getRight () == null) {
knoten_ref.setRight (neu_ref) ;
} else {
add (knoten_ref.getRight (), neu_ref) ;
}
} // endif
} // endmethod add
public void addKnoten (int info) {
Knoten neu_ref = new Knoten (info) ;
if (wurzel_ref == null) {
wurzel_ref = neu_ref ;
} else {
add (wurzel_ref, neu_ref) ;
} // endif
} // endmethod addKnoten
public void inorderTraverse () {
inorder (wurzel_ref) ;
} // endmethod inorderTraverse
private void inorder (Knoten knoten_ref) {
if (knoten_ref != null) {
// Reihenfolge: linker Teilbaum - Knoten - rechter Teilbaum
inorder (knoten_ref.getLeft ()) ;
knoten_ref.printInfo () ;
inorder (knoten_ref.getRight ()) ;
} // endif
} // endmethod inorder
public void preorderTraverse () {
preorder (wurzel_ref) ;
} // endmethod preorderTraverse
private void preorder (Knoten knoten_ref) {
if (knoten_ref != null) {
// Reihenfolge: Knoten - linker Teilbaum - rechter Teilbaum
knoten_ref.printInfo () ;
preorder (knoten_ref.getLeft ()) ;
preorder (knoten_ref.getRight ()) ;
} // endif
} // endmethod preorder
public void postorderTraverse () {
postorder (wurzel_ref) ;
} // endmethod postorderTraverse
private void postorder (Knoten knoten_ref) {
if (knoten_ref != null) {
// Reihenfolge: linker Teilbaum - rechter Teilbaum - Knoten
postorder (knoten_ref.getLeft ()) ;
postorder (knoten_ref.getRight ()) ;
knoten_ref.printInfo () ;
} // endif
} // endmethod postorder
} // endclass Suchbaum
//und eine Testklasse
class SuchbaumTest {
public static void main (String [ ] args) {
int [ ] feld_ref = {5, 10, 2, -1, 0, 4, 3, 5, 7, 7, 9, 8, -4, 12} ;
Suchbaum baum_ref = new Suchbaum () ;
// Suchbaum erstellen
for (int i = 0; i < feld_ref.length; i++) {
baum_ref.addKnoten (feld_ref [i]) ;
}
// Suchbaum traversieren
System.out.println ("Baum nach preorder traversiert:") ;
baum_ref.preorderTraverse () ;
System.out.println ("----------------------------------") ;
System.out.println ("Baum nach inorder traversiert:") ;
baum_ref.inorderTraverse () ;
System.out.println ("----------------------------------") ;
System.out.println ("Baum nach postorder traversiert:") ;
baum_ref.postorderTraverse () ;
System.out.println ("----------------------------------") ;
} // endmethod main
} // endclass