Baum.java
public class Baum {
public BaumKnoten wurzel;
// Konstruktor
// legt gleich den Wurzelknoten an
public Baum(String kind) {
wurzel = new BaumKnoten(kind);
}
// öffentliche Methoden
public boolean einfuegeMutter(String nameMutter, String nameKind) {
return einfuegeMutter(wurzel, nameMutter, nameKind);
}
public boolean einfuegeVater(String nameVater, String nameKind) {
return einfuegeVater(wurzel, nameVater, nameKind);
}
public void print() {
print(wurzel, 0);
}
// Hilfsmethoden
private boolean einfuegeMutter(BaumKnoten s, String nameMutter,
String nameKind) {
boolean gefunden;
// suche Kind
// ist es schon Knoten s?
if (s.name.equals(nameKind)) { // gefunden
s.mutter = new BaumKnoten(nameMutter); // Mutter eintragen
return true;
}
// oder ein Vorfahre mütterlicherseits ?
if (s.mutter != null) {
gefunden = einfuegeMutter(s.mutter, nameMutter, nameKind);
if (gefunden) {
return true;
}
}
// oder ein Vorfahre väterlicherseits ?
if (s.vater != null) {
gefunden = einfuegeMutter(s.vater, nameMutter, nameKind);
if (gefunden) {
return true;
}
}
// im Teilbaum s ist es nicht
return false;
}
private boolean einfuegeVater(BaumKnoten s, String nameVater,
String nameKind) {
boolean gefunden;
// suche kind
// ist es schon Knoten s?
if (s.name.equals(nameKind)) { // gefunden
s.vater = new BaumKnoten(nameVater); // Vater eintragen
return true;
}
// oder ein Vorfahre mütterlicherseits ?
if (s.mutter != null) {
gefunden = einfuegeVater(s.mutter, nameVater, nameKind);
if (gefunden) {
return true;
}
}
// oder ein Vorfahre väterlicherseits ?
if (s.vater != null) {
gefunden = einfuegeVater(s.vater, nameVater, nameKind);
if (gefunden) {
return true;
}
}
// im Teilbaum s ist es nicht
return false;
}
private static int indentPrint = 3; // Einrückung beim Ausdrucken
void print(BaumKnoten s, int pos) {
// drucke Baum unter s, um pos nach rechts eingerückt
// erst pos Leerzeichen
for (int i=0; i<pos; i++) {
System.out.print(" ");
}
// dann den Namen
System.out.println(s.name);
// dann den Rest der Familie
if (s.vater != null) {
print(s.vater, pos + indentPrint);
}
if (s.mutter != null) {
print(s.mutter, pos + indentPrint);
}
}
public static void main(String[] args) {
Baum family = new Baum("adam");
family.einfuegeVater("brian", "adam");
family.einfuegeMutter("daniela", "brian");
family.einfuegeMutter("charlotte", "adam");
family.einfuegeVater("edward", "charlotte");
family.einfuegeMutter("fanny", "charlotte");
family.einfuegeMutter("gwendolyn", "fanny");
family.print();
}
}