Ratschlag->Datenstruktur für Baum
-
Hallo,
ich möchte eine sinnvolle datenstruktur aufbauen für meinen Baum bzw. Aus meiner ListView die ja im Grunde einen Baum darstellt.
Ich habe in Ebene0 einträge und zu jedem dieser einträge subeinträge und dann wiederum subeinträge....
Wie kann ich das sinnvoll speichern um in Zukunft schnell darauf zugreifen können. Ist eine QMap sinnvoll? DIe als schlüssel die erste Ebene darstellt jeweil und als Einträge dann jeweils die Subeinträge. Gibt es sowas wie map mit 3 listen als typen oder so ? oder wie wird das sinnvoll gemacht?
-
Wie man sowas am besten realisiert, kommt ziemlich darauf an, wie man den Baum verwenden möchte, wie man darin navigieren möchte, wie man auf die einzelnen Elemente zugreifen möchte, welche Suchfunktionalität benötigt wird.
Eine einfache Idee wäre folgende:
class X { // oder was sonst gebraucht wird, um die Daten aufzunehmen int data; X** childs; }Man bräuchte dann nur noch ein X* irgendwo als Wurzelelement.
Ganz einfach aufgebaut, aber bzgl. Navigation eher ineffizient, und wenn ein bestimmtes Element gesucht wird, katastrophal, wenn man die Elemente nicht irgendwie sinnvoll einsortiert (bzgl. Sortierung: z.B. aus dem Datenbankbereich: B*-Bäume).
Nachdem mit QMap QT ins Spiel gebracht wurde: Statt X** bietet sich natürlich auch die Verwendung von QPtrList oder ähnlichen Container-Klassen an, evtl. auch Container aus der Standardbibliothek.
-
Hallo,
wo ist denn das Problem mit einem Pinären baum?struct btree { int wert; struct btree *left; struct btree *right; };Ne schnellere Methode einen Wert zu finden gibt es nicht, solange der Baum ausgeglichen ist.