Baumstruktur erzeugen

Status
Nicht offen für weitere Antworten.

dralban7

Mitglied
Hi,

hallo an Alle. Als Neuer in der Java-Welt habe ich eine Frage bzgl. Baumstrukturen.

Ich habe einiges im Google über JTree gelesen, aber ich brauche kein UI, sondern will die Baumstruktur
zur Laufzeit in einem Objekt halten. Desweiteren habe ich über binäre Bäume gelesen, aber das scheint
mir nicht ganz zu helfen. Treeset und TreeMap scheinen auch nicht das Richtige sein...

Hoffe habe da nichts übersehen, aber vielleicht könnt ihr mir sagen, was ich für eine Klasse am besten
für mein unten stehende Aufgabe nehmen soll?

Gibt es in Java nicht eine Klasse, wo ich eine Baumstruktur erzeugen kann, um dann später diese abzufragen,
d.h. z.B. eine Abfrage, wie z.B. "gebe mir das Kind vom Knoten A".

So soll mein Baum aussehen:
Root (hat 2 Kinder, nämlich A und B)
- A
--A1
---A11
--A2
--A3
-B
--B1
--B2
--B3
---B31
---B32

usw...
D.h. B hat 3 Kinder, nämlich B1, B2 und B3.
B3 hat hingegen 2 Kinder, nämlich B31 und B32.
B32 könnte z.B. dann 7 Kinder haben usw...

Vielen Dank für eure Hilfe.

G
Karl
 

didjitalist

Bekanntes Mitglied
Baumstrukturen werden in vielen Javaklassen verwendet, aber eine allgemeine Klasse gibt es dafür nicht. Deshalb ist es eigentlich niemals eine schlechte Idee, sich einmal hinzusetzen, und sich so eine allgemeine Struktur zu schreiben.
 

Saxony

Top Contributor
Hiho,

musste wohl oder übel selber schreiben:

Code:
import java.util.Vector;

public class TreeNode {
	
    private Vector<TreeNode> children = new Vector<TreeNode>();
	
    private Object data;
	
    public TreeNode(Object aData) {
		
        this.data = aData;
    }
	
    public void addChildren(TreeNode... aChildren) {
		
        for (TreeNode child : aChildren)		
            this.children.add(child);
    }
	
    public Object getData() {
		
        return this.data;
    }
    
    public Vector<TreeNode> getChildren() {
		
        return this.children;
    }
}

Code:
public class Tree {
	
    private TreeNode root;
	
    public Tree(TreeNode aRoot) {
		
        this.root = aRoot;
    }
	
	
    public void printTree() {
		
        this.print(this.root);
    }
	
    private void print(TreeNode aRoot) {
		
        System.out.println(aRoot.getData().toString());
        for(int i = 0; i < aRoot.getChildren().size(); i++) {
			
            this.print(aRoot.getChildren().get(i));
        }
    }
	
    public static void main(String[] args) {
		
        TreeNode n1 = new TreeNode("Root");
        TreeNode n2 = new TreeNode("A");
        TreeNode n3 = new TreeNode("B");
        TreeNode n4 = new TreeNode("A1");
        TreeNode n5 = new TreeNode("A2");
        TreeNode n6 = new TreeNode("A3");
        TreeNode n7 = new TreeNode("B1");
        TreeNode n8 = new TreeNode("B2");
		
        n1.addChildren(n2, n3);
		
        n2.addChildren(n4, n5, n6);
		
        n3.addChildren(n7, n8);

        Tree tree = new Tree(n1);
		
        tree.printTree();
    }
}

[edit]
Hab mal addChild(TreeNode) auf addChildren(TreeNode...) umgeschrieben.
[/edit]

bye Saxony
 

Final_Striker

Top Contributor
Ich habe einiges im Google über JTree gelesen, aber ich brauche kein UI, sondern will die Baumstruktur
zur Laufzeit in einem Objekt halten. Desweiteren habe ich über binäre Bäume gelesen, aber das scheint
mir nicht ganz zu helfen. Treeset und TreeMap scheinen auch nicht das Richtige sein...

kannst ja trotzdem jtree verwenden, ist doch auch nur ein objekt. :wink:
 

Saxony

Top Contributor
Final_Striker hat gesagt.:
Ich habe einiges im Google über JTree gelesen, aber ich brauche kein UI, sondern will die Baumstruktur
zur Laufzeit in einem Objekt halten. Desweiteren habe ich über binäre Bäume gelesen, aber das scheint
mir nicht ganz zu helfen. Treeset und TreeMap scheinen auch nicht das Richtige sein...

kannst ja trotzdem jtree verwenden, ist doch auch nur ein objekt. :wink:

Alleine schon die Verwendung von

Code:
import javax.swing.JTree;

in meinem model package hält mich von dieser Verwendung ab. :shock:

bye Saxony
 

AlArenal

Top Contributor
Ich glaube ich frug letztens schonmal ergebnislos in einem anderen Thread: Was ist so verwerflich an der Verwendung vom TreeModel? Nichts und niemand nötigt mich dies nur im Kontext eines JTree zu verwenden (das würde ja auch dem Sinn eines Model widersprechen).
 

Saxony

Top Contributor
Ja man kann DefaultTreeModel in Verbindung mit DefaultMutableTreeNode verwenden.

Code:
    public static void main(String[] args) {
		
		DefaultMutableTreeNode n1 = new DefaultMutableTreeNode("Root");
		DefaultMutableTreeNode n2 = new DefaultMutableTreeNode("A");
		DefaultMutableTreeNode n3 = new DefaultMutableTreeNode("B");
		DefaultMutableTreeNode n4 = new DefaultMutableTreeNode("A1");
		DefaultMutableTreeNode n5 = new DefaultMutableTreeNode("A2");
		DefaultMutableTreeNode n6 = new DefaultMutableTreeNode("A3");
		DefaultMutableTreeNode n7 = new DefaultMutableTreeNode("B1");
		DefaultMutableTreeNode n8 = new DefaultMutableTreeNode("B2");
		
		n1.add(n2);
		n1.add(n3);
		
		n2.add(n4);
		n2.add(n5);
		n2.add(n6);
		
		n3.add(n7);
		n3.add(n8);
		
		DefaultTreeModel mdl = new DefaultTreeModel(n1);
		
		MyClass.printTree((DefaultMutableTreeNode)mdl.getRoot());
	}
	
	private static void printTree(DefaultMutableTreeNode aNode) {
		
		System.out.println(aNode.toString());
		
		Enumeration<DefaultMutableTreeNode> e = aNode.children();
		
		while(e.hasMoreElements()) {
			
			MyClass.printTree(e.nextElement());
		}
	}

;)

Allerdings habe ich dann wieder javax.swing imports in meinen Model Packages und das will ich nicht! :D

bye Saxony
 

Saxony

Top Contributor
Hiho,

Wikipedia hat gesagt.:
Bei Swing handelt es sich um eine Programmierschnittstelle und Grafikbibliothek zum Programmieren von grafischen Benutzeroberflächen.

In Model hat UI nix zu suchen - Basta!

bye Saxony
 

AlArenal

Top Contributor
Saxony hat gesagt.:
In Model hat UI nix zu suchen - Basta!

Im TreeModel ist auch kein UI drin. Es ist ein MODEL!

In einem Atlas sind auch keine kleinen Flugzeuge und Leute drin, die einem zuwinken, wenn man mit der Lupe rangeht...
 

Saxony

Top Contributor
Hiho,

na dann nimm du javax.swing.tree.DefaultTreeModel und ich was selbst gebautes!

Mich stören winkende - sowie auch nicht winkende - Leute!

bye Saxony
 
M

maki

Gast
Einen Tree selbst zu schreiben ist nicht schwer, man lernt dabei das eine oder andere Entwurfsmuster kennen (Kompositium, Visitor, etc) und kann spezielle Funktionen hinzufügen, zB. eine Kaskadennummer erstellen lassen für textuelle Darstellungen des Trees.

Das hier
ROOT
- A
--A1
---A11
--A2
--A3
-B
--B1
--B2
--B3
---B31
---B32

könnte dann so aussehen:
Code:
1          ROOT
1.1        A
1.1.1      A1
1.1.1.1    A11
1.1.2      A2
1.1.3      A3
1.2        B
1.2.1      B1
1.2.2      B2
1.2.3      B3
1.2.3.1    B31
1.2.3.2    B32
 

dralban7

Mitglied
Super, vielen Dank für diese vielen Antworten...

Also, sieht so aus, daß ich entweder selber was bauen kann oder javax.swing.JTree nehme.
Ich stimme da zu, daß im Model UI nichts zu suchen hat, aber darüber kann man vielleicht hier endlos streiten.
Die Objekte in javax.swing.JTree könnte man natürlich nutzen, aber bevor wir das vertiefen...

...finde ich diesen Punkt nicht ganz unwichtig:
SlaterB schrieb: "Der Code ist nicht mehr nach J2ME portierbar"

Bei so genannten »embedded consumer products« wie etwa Mobiltelefone oder PDAs würde man
dann schlecht aus sehen.

Aber, wie gesagt...
Verstanden habe ich, daß ich bei Bedarf sogar javax.swing.JTree nutzen könnten oder mir etwas selber baue.

Bis hierhin vielen Dank für die vielen Infos.

G
Karl
 

Saxony

Top Contributor
Hiho,

JTree ist die visuelle Komponente! Es ging hier eigentlich eher um das TreeModel. ;)

bye Saxony
 

dralban7

Mitglied
Yes, danke...

Meinte natürlich javax.swing generell, d.h. damit auch TreeModel
javax.swing.tree.TreeModel...

G
Karl
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Helgon Baumstruktur tiefe N erzeugen Java Basics - Anfänger-Themen 3
J ternäre(3) Baumstruktur Java Basics - Anfänger-Themen 2
W Baumstruktur Java Basics - Anfänger-Themen 8
S Baumstruktur: tiefsten Knoten finden Java Basics - Anfänger-Themen 3
C ausgabe Baumstruktur java.io.File Java Basics - Anfänger-Themen 2
GetStringFrmObj Klassen Baumstruktur aus XMls erstellen, aber wie? Java Basics - Anfänger-Themen 15
S Baumstruktur zusätzlich ebenenweise repräsentieren Java Basics - Anfänger-Themen 9
S RBTree - baumstruktur darstellen Java Basics - Anfänger-Themen 7
A Baumstruktur Java Basics - Anfänger-Themen 6
R Baumstruktur Java Basics - Anfänger-Themen 4
G Baumstruktur rekursiv durchlaufen Java Basics - Anfänger-Themen 2
G Einfügen von Elementen in Baumstruktur Java Basics - Anfänger-Themen 3
K Java Ausgabe als Baumstruktur Java Basics - Anfänger-Themen 8
M Baumstruktur durchgehen Java Basics - Anfänger-Themen 9
G Baumstruktur Java Basics - Anfänger-Themen 3
F Baumstruktur aus 2 DB-Tabellen Java Basics - Anfänger-Themen 6
W Javadoc HTML erzeugen mit allen dependency Java Basics - Anfänger-Themen 11
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Erzeugen einer eindeutigen ID Java Basics - Anfänger-Themen 2
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
L Simples Spielfeld erzeugen Java Basics - Anfänger-Themen 1
G Anklickbaren Text erzeugen Java Basics - Anfänger-Themen 2
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
S Mit nextGaussian() positive Zahlen erzeugen? Java Basics - Anfänger-Themen 39
S Array erzeugen mit verschiedener Verteilung Java Basics - Anfänger-Themen 11
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
L Dynamische Anzahl an Arrays mit verschiedenen Namen erzeugen Java Basics - Anfänger-Themen 6
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
K Methoden JTExtField mit Array erzeugen Java Basics - Anfänger-Themen 13
B Kann man eine Tabelle in Eclipse erzeugen und damit arbeiten? Java Basics - Anfänger-Themen 8
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
I TextField Array mit for Loop erzeugen Java Basics - Anfänger-Themen 4
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
G Objekt der selben Klasse wie selbst mit Aufrufen des Konstruktors erzeugen Java Basics - Anfänger-Themen 14
J Eindeutige Nummer (8 stellig) erzeugen Java Basics - Anfänger-Themen 9
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
B OOP Objekt in IF erzeugen - funktioniert nicht so richtig Java Basics - Anfänger-Themen 11
neerual Int-Felder erzeugen Java Basics - Anfänger-Themen 16
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
D Erste Schritte Random erzeugen Java Basics - Anfänger-Themen 28
P Objekt mit =new in Methode erzeugen Java Basics - Anfänger-Themen 4
L Threads Laufbild Erzeugen Problem mit Aktualisieren des JPanels Java Basics - Anfänger-Themen 2
J In Java einen Ton erzeugen Java Basics - Anfänger-Themen 8
C Array Muster erzeugen Java Basics - Anfänger-Themen 2
S Objekte "gegebenfalls" erzeugen Java Basics - Anfänger-Themen 5
D Java Ausdruck erzeugen / Formular Java Basics - Anfänger-Themen 4
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
R Baum erzeugen Java Basics - Anfänger-Themen 61
D Objekt per If erzeugen. Java Basics - Anfänger-Themen 11
J Bildschirmausgabe erzeugen Java Basics - Anfänger-Themen 30
B Beliebig viele Rechtecke erzeugen Java Basics - Anfänger-Themen 5
J Objekt mit Methodendruchlauf erzeugen Java Basics - Anfänger-Themen 1
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
P Erste Schritte [gelöst]Erzeugen einer Klasse aus der Klassenbibliothek Java Basics - Anfänger-Themen 4
C Int mit vorangestellten Nullen und maximal 4 stellen erzeugen. Java Basics - Anfänger-Themen 4
P Input/Output Objekte per Eingabe erzeugen Java Basics - Anfänger-Themen 1
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
U JNA: Strukturen erzeugen Java Basics - Anfänger-Themen 8
S Variablen Variable erzeugen und Array mit Variablen befüllen Java Basics - Anfänger-Themen 26
S Header- Datei erzeugen mit javah Java Basics - Anfänger-Themen 1
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
R Erste Schritte Schleife erzeugen (mit If Anweisung) Java Basics - Anfänger-Themen 3
I HTML Tabelle nur so lange erzeugen bis Höhe erreicht Java Basics - Anfänger-Themen 9
M Zusatzzahlen in array erzeugen Java Basics - Anfänger-Themen 5
B Stützstellen (Vektor) erzeugen? Java Basics - Anfänger-Themen 8
Z Erste Schritte 9x9 Felder Erzeugen+Aufrufen Java Basics - Anfänger-Themen 1
Y Variable Menge von Objekten erzeugen und mit ihren Attributen rechnen Java Basics - Anfänger-Themen 7
J Anzahl von for-Schleifen in Abhängigkeit von Zahleneingabe erzeugen Java Basics - Anfänger-Themen 1
J JLabels in schleife erzeugen mit verschiedenen namen? Java Basics - Anfänger-Themen 5
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
F Input/Output Blocking file read erzeugen Java Basics - Anfänger-Themen 0
Thallius Klassen aus Classname programmatisch erzeugen. Wie geht das in java? Java Basics - Anfänger-Themen 5
B Zufallsdatum innerhalb eines bestimmten Bereiches erzeugen Java Basics - Anfänger-Themen 3
D JComboBox erzeugen Java Basics - Anfänger-Themen 1
J Erste Schritte Array dyn. erzeugen Java Basics - Anfänger-Themen 2
A OOP Objekte per Schleife erzeugen Java Basics - Anfänger-Themen 1
F Superklasse nochmals erzeugen? Java Basics - Anfänger-Themen 7
G Instanzen eines Interfaces erzeugen Java Basics - Anfänger-Themen 7
M Variablen Variable zur Laufzeit erzeugen Java Basics - Anfänger-Themen 3
P Vererbung Neues Objekt aus Vorlage erzeugen Java Basics - Anfänger-Themen 1
M Erzeugen beliebig vieler Objekte, aber wie wechselnde Bezeichner? Java Basics - Anfänger-Themen 5
W Objekte erzeugen Java Basics - Anfänger-Themen 2
N Interface Interface (sinnvoll) erzeugen Java Basics - Anfänger-Themen 8
L 6stellige Zufallszahlen erzeugen & auf einzigartigkeit prüfen Java Basics - Anfänger-Themen 3
A Kleinste Ziffer im Array suchen um Sortierung zu erzeugen Java Basics - Anfänger-Themen 2
Joew0815 Interface JSON Objekte aus Java Objekten erzeugen Java Basics - Anfänger-Themen 9
B OOP Objekte erzeugen mit Hilfe einer for Schleife Java Basics - Anfänger-Themen 29

Ähnliche Java Themen

Neue Themen


Oben