(dieses Beispiel sinngemäß aus: Naftalin, Wadler: Java Generics and Collections, O'Reilly 2006.)
binäre Bäume mit:
(Wdhlg. Kompositum)
interface Tree<K> { }
class Branch<K> implements Tree<K> {
Tree<K> left; Tree<K> right;
}
class Leaf<K> implements Tree<K> {
K key;
}
Aufgabe: Konstruktoren, toString, Testmethode
class Trees {
// vollst. bin. Baum der Höhe h
static Tree<Integer> full (int h);
}
System.out.println (Trees.full(1))
==> Branch{left=Leaf{key=0},right=Leaf{key=0}}
Besucher (mit Resultattyp R, für Bäume mit Schlüsseltyp K)
interface Tree<K> {
interface Visitor<K, R> {
R leaf (K key);
R branch (R left, R right);
}
<R> R visit (Visitor<K,R> v);
}
Aufgabe: implementiere visit in Branch und Leaf
Benutzung: Anzahl der Blätter:
class Trees {
static <K> int leaves (Tree<K> t) {
return t.visit(new Tree.Visitor<K,Integer>() {
public Integer branch(Integer left, Integer right) {
return left + right;
}
public Integer leaf(K key) {
return 1;
}
});
}
}
Hinweis: am 1. 5. keine Vorlesung (Feiertag), am 2. 5. nur eine Übung (9:30) zu Fragen zu Entwurfsmustern.