rekursive Baumstruktur
Christoph Heger
- java
0 Ilja0 Daniel Thoma0 Noodles
Hallo,
Ich habe eine Tabelle die so aussieht:
ID Parent ID Name
1 0 Lollo
2 1 Heinz
3 1 Klaus
4 1 Thomas
5 3 Anja
Die will ich jetz per Rekursion zu einem Baum ausgeben, aber mir fehlt die zündende Idee, kann mir jemand helfen?
MfG
Christoph
yo,
Die will ich jetz per Rekursion zu einem Baum ausgeben, aber mir fehlt die zündende Idee, kann mir jemand helfen?
dann wollen wir mal zünden lassen, wobei der name eigentlich schon programm ist. alle datensätze auslesen und eine funktion (klasse ?)erstellen, die sich eventuell selbst aufruft, sprich rekursiv.
Ilja
yo,
Die will ich jetz per Rekursion zu einem Baum ausgeben, aber mir fehlt die zündende Idee, kann mir jemand helfen?
dann wollen wir mal zünden lassen, wobei der name eigentlich schon programm ist. alle datensätze auslesen und eine funktion (klasse ?)erstellen, die sich eventuell selbst aufruft, sprich rekursiv.
Ilja
Naja, soweit bin ich auch schon, nur das ich das problem hab das wenn sich die klasse selber aufruft ich es bisher nur geschafft habe an jeden unterknoten gleich viele weitere unterknoten ranzuhängen, aber nciht so das ich halt an einigen zweigen nur einen unterknoten hab und an andern mehrere.
Was Rekursion ist weiss ich schon, aber wie ich das schaffen soll was ich grade beschrieben hab, das ist mein problem
Bis denn
Christoph
yo,
ich bin nicht so bewandert in der OOP, aber ich würde sagen, die methode ruft sich selber auf, nicht die klasse. der clou dabei ist, dass sich die methode solange selbst aufruft, die noch unterverzeichnisse vorhanden sind, also keine feste anzahl von aufrufen, sondern abhängig davon, ob es noch weitere unterverzeichnisse gibt. der ausstieg aus der rekursion wäre den, dass es keine weiteren unterverzeichnisse mehr gibt. allem in allem bist du damit unabhängig, von einer festen anzahl.
Ilja
Hi,
Joa, das is mir schon alles klar, aber trotzdem danke für deine Hilfe, ob das jetzt Klasse oder methode ist, ist ja an und für sich auch egal, wenn dann hab ich die begrifflichkeiten durcheinandergeschmissen.
MfG
Christoph
Hallo Christoph,
Ich habe eine Tabelle die so aussieht:
ID Parent ID Name
1 0 Lollo
2 1 Heinz
3 1 Klaus
4 1 Thomas
5 3 Anja
Was Du brauchst, ist also eine Methode, die einem Knoten alle
Kinderknoten anhängt und sie rekursiv selbst aufruft.
Ein Knoten wäre so etwas:
class Node {
//Konstruktor
Node(Integer id, String name, List<Node> childs);
//Eigenschaften des Objekts
Integer id;
String name;
List<Node> childs;
}
Die Tabelle hat eine Methode, um alle Kinder eines Knotens zu bekommen (ich nenne sie hier mal getRows(Integer id)) sowie folgende Methoden um den Baum zu erzeugen:
List<Node> getTree(Integer id) {
List<Node> childs = new List<Node>();
foreach(Row row: getRows(id)) {
childs.add(new Node(row.id, row.name, getTree(row.id)));
}
return childs;
}
Node getTree() {
return new Node(0, "ROOT", getChilds(0));
}
Das ist kein lauffähiges Java, aber wie man rekursiv einen Baum aus einer flachen Struktur erzeugt, dürfte ganz gut erkennbar sein.
Grüße
Daniel
Danke,
ich denke das hat mir geholfen, dann mal frisch ans Werk.
Bis denn
Christoph
Servus Christoph,
rein vom Konzept her müsste Nachfolgendes funktionieren. Du setzt ein Startobjekt (in deinem Fall 'Lollo') und gehst durch alle Kindelemente. Sollten diese Elemente wiederum Kinder beinhalten, so rufe die Funktion rekursiv auf.
Grüße Noodles
P.S. ich hoffe du kannst den Code entsprechend umsetzen. Ich war zu faul ihn in Java zu implementieren und auszuprobieren *g*
method main()
entry = STARTOBJEKT
recurseTree(entry)
method recurseTree(entry)
children[] = entry.getChildren()
if children != null
//Mach mit dem Kind was auch immer zu möchtest
child...
foreach child In children
recurseTree(child)