2016-05-30 3 views
0

Ich versuche eine Implementierung eines Tree zu finden, der sowohl Vorgänger als auch Nachfolger hat. Zum Beispiel Stammbaum, wo wir haben - ein ausgewählter Kontakt (root) - seine/ihre Eltern, Großeltern usw. - seine/ihre Kinder, Enkel usw. Im Idealfall wie folgt aussehen:Java Tree mit Vorgänger und Nachfolger

GF1 GM1 GF2 GM2 
    F   M 
     Root 
    S   D 
GS1 GD1 GS2 

wo GF - Grand Vater
GM - Grand Mother
F - Vater
M - Mutter
S - Son
D - Tochter
G S - Großartiger Sohn
GD - Großartige Tochter

Ich habe mehrere Baumimplementierungen gefunden, aber keine von ihnen erlauben, die Hierarchie wie oben zu zeichnen.

Jede Hilfe wird geschätzt.

Danke.

+0

nur eine Frage: Ihr Problem ist, dass Sie den Baum nicht zeichnen können? (Ich frage, ob Sie ein richtiges Modell haben und nur die Zeichnung fehlt, dann sollte die Frage neu formuliert werden) ...oder suchen Sie nach einem geeigneten Modell, das Ihre Daten darstellen kann (und Zeichnung kommt später, am besten in separater Frage) –

+0

Ich habe bereits ein Modell, das Daten aus DB abruft, aber die Frage ist, wie man einen Baum richtig zeichnet. Zum Beispiel gibt es eine schöne Implementierung einer Baumanzeige: ** abego **, aber es fehlt ihnen die Möglichkeit, den Baum mit Eltern und Kindern zu zeichnen. –

Antwort

0

Ich nehme an, ein binärer Baum sollte für Sie in Ordnung sein (unter der Annahme, dass alle Knoten höchstens zwei Kinder haben - männlich und weiblich).

Wenn Sie die Zusammenfassung Node für den Baum entwerfen, können Sie außerdem den linken und rechten Eltern (d. H. Mutter und Vater) zusätzlich zu den Zeigern zu den linken und rechten Kindern Zeiger hinzufügen.

class Node { 
    Node mother; 
    Node father; 
    Node son; 
    Node daughter; 
} 

Beachten Sie, dass, wenn ein Node zum Baum hinzufügen, sollten Sie nicht nur die Referenz in den aktuellen Knoten aktualisieren, für die Sie einen neuen Nachfolger/Vorgänger hinzufügen, aber Sie sollten einen Verweis des aktuellen Knotens der Nachfolger hinzufügen/Vorgänger auch.

Damit können Sie von einem ausgewählten (Stamm-) Knoten aus auf und ab navigieren.

+0

kann ich vorschlagen, eine 'List childList' zu haben, damit der Knoten eine andere Anzahl an Kindern hat (nicht nur ** ein ** Sohn und ** eine ** Tochter)? Außerdem wäre das eine sehr geeignete Lösung! –

+0

Leider könnte es mehrere Söhne und mehrere Töchter geben. In diesem Fall brauchen wir einen n-ären Baum. Dies funktioniert tatsächlich, wenn Sie versuchen, nur Kinder oder nur Eltern anzuzeigen. Das Problem besteht darin, ** beide ** Eltern und Kinder gleichzeitig anzuzeigen. –

+0

Sind Sie sicher, dass Sie einen ** Binärbaum ** brauchen, anstatt nur einen ** Baum **? –

0

Sie ein eigenes Widget benötigen, eine Art, die in jedem Fall ist nur ein Table

, wenn Sie wissen, dass ein Baum ist lediglich eine einfache Tabelle Implementierung können Sie Ihre benutzerdefinierte Tabelle erstellen und dekorieren ist ein Baum

table representing a tree

alle Kinder/Eltern sind eingekerbt entsprechend der Tiefe, so Elternteil sind in der Tiefe 1, Tiefe parent.parent sind in 2, das gleiche gilt für Kinder.

Wenn eine Zeile einen Eintrag enthält, können (sollten) Sie das Baumsymbol zeichnen, es ist ein + Zeichen, wenn die Spalte gleich der Knotentiefe ist, oder |, wenn die Tiefe tiefer als die Zeile ist.

Unglücklicherweise weiß ich keine Implementierung dabei, also müssen Sie es auf eigene Faust tun. Wenn Sie Probleme bei der Implementierung einer Tabelle und/oder eines Tabellenmodells haben, zögern Sie nicht, eine andere Frage zu stellen!

+0

mit einem 'JTable' und einem' JTableModel' können Sie einfach Knoten an jeder beliebigen Position einfügen –