Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Tree durchgehen/anlegen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.12.2004, 15:23 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
habe ein kleines problem da ich noch nie mit Trees gearbeitet habe (Suche hat mir nicht so wirklich geholfen):

Habe momentan ein array aus einer struktur mit folgenden elementen:


Code:
index
parent
name



Wie kann ich aus denen nun am "einfachsten" und schnellsten einen Tree bauen?

momentan schaut das z.b so aus:


Code:
INDEX 1, PARENT 0, NAME Lokale Ordner
INDEX 8, PARENT 1, NAME Entwürfe
INDEX 7, PARENT 1, NAME Gelöschte Objekte
INDEX 4, PARENT 1, NAME Posteingang
INDEX 6, PARENT 1, NAME Gesendete Objekte



ich bekomm die Elemente völlig unsortiert. Weiterhin weiß ich nicht wieviele Zweige es geben wird.

Meine Idee sähe folgendermaßen mal aus:


C++:
struct Tree {
  char name[512];
  unsigned long index;
  Tree *parent;
  Tree *prev;
  Tree *next;
};



nur wie befüll ich die ohne "tausendemale" den kompletten Tree durchzugehen um die Elemente zuzuordnen?


Bearbeitung:

evtl wär es ja einfach wenn man am anfang die elemente sortiert? also erst nach parent von 0 - ULONG_MAX und dann jeweils die Indexes noch sortiert, nur wie kann ich sowas machen das er mir erst das eine und dann das andere "korrekt" sortiert?


--
class God : public ChuckNorris { };

Dieser Post wurde am 08.12.2004 um 15:26 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2004, 17:48 Uhr
virtual
Sexiest Bit alive
(Operator)


Halte die Tree Object doch einfach in einem Vektor. Dann brauchst Du nie lange zu suchen, sondern kannst eben mit Hilfe des Index direkt das korrekte TreeObject finden.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2004, 19:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wie meinst du das?

wie kann ich den ein vector aus structs nach einem bestimmten "index"-element durchsuchen?

Was ich machen will bzw schon mache ist folgendes:

Auslesen der Folder-Daten von Outlook Express (mit der Lib aus der FAQ, OEDBX.dll)

da bekomme ich ein Array von Structs mit den obigen 3 values: index, parent und name

nun möchte ich die Baumstruktur der "Verzeichnisse" als Ordner in Windows anlegen:


z.B.:

Lokale Ordner
|- Posteingang
|- Sonstiges
    |- Bla
       |- Muh



danach möchte (evtl auch in einem Schritt) die Emails des jeweiligen "Ordners" mit hilfe der OEDBX.dll die Verzeichnisse "entpacken".

Mein problem ist: wenn ich in dem array die verzeichnisse durchgehe, müsste ich immer nach dem parent suchen und ggf so oft nach dem parent bis er mich zum "anfang" zurückführt.

also wenn ich z.b nun den Ordner Muh habe, so ist Parent nicht 0, deshalb muss ich nach Parent suchen, dann kriege ich Bla, dann ist Parent wieder nicht 0, kriege ich Sonstiges durch suche, dann Lokale Ordner und erst dann ist Parent 0. Ich kriege also den Pfad

Muh\Bla\Sonstiges\Posteingang\Lokale Ordner

(die elemente des pfads muss ich dann ja nur umdrehen)

Nur 2 Dinge sind unklar:

1. wie suche ich nach dem parent am schnellsten
2. wie sollte ich dies am besten tun wenn vom parent der parent nicht null ist?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2004, 19:58 Uhr
Hans
Library Walker
(Operator)



Zitat von FloSoft:
Hallo,
habe ein kleines problem da ich noch nie mit Trees gearbeitet habe (Suche hat mir nicht so wirklich geholfen):

Habe momentan ein array aus einer struktur mit folgenden elementen:


Code:
index
parent
name



Wie kann ich aus denen nun am "einfachsten" und schnellsten einen Tree bauen?


Hi Flo,
hast Du (oder Uwe) nicht das alte "Programmieren in C" von Kernigan/Ritchie? - Da steht (in dem Kapitel über Zeiger, wenn ich nicht irre) ein Beispielprogramm drin, das einen B-Baum aufbaut. Dabei ist es auch völlig egal, in welcher Reihenfolge die Elemente kommen, weil sich die Sortierung durch die Art ergibt, wie die Elemente in den Baum eingefügt werden.
Ansonsten fällt mir dazu auch nix weiter ein, als weitere Literaturtips. - Der Bibliokar in mir eben...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.12.2004, 21:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das hab ich leider nich das buch, habs nun halt ohne baum gelöst, ging ja auch

hab nun immer mit einer funktion den pfad zusammengebaut die dann im grunde rekursiv aufgerufen wurde.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: