Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit inorder- Traversierung

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
11.06.2006, 14:23 Uhr
somme



Hallo Leute,

Ich muss bis Dienstag ein Programm für eine CD-Sammlung entwerfen, welches eingegebene Daten nach interpreten und titel sortiert und eine Suchfunktion bereitstellt. Bis dahin ist auch alles O.K. Ich verwende dafür einen Binären Suchbaum, der die oben genannten Funktionen tadellos erfüllt.

Jetzt zum Problem.... Es soll ebenfalls eine Funktion bereitgestellt werden, die alle bisher eingegebenen CDs sortiert ausgibt. Dafür habe ich folgende inorder- Traversierung geschrieben.


C++:
    void traverse(cd *inorder, string interpreten[], string titel[], unsigned laufzeiten[])
    {
        if(inorder == leaf)
        {    
             return;
        }
    
        traverse(inorder->_left, interpreten, titel, laufzeiten);
        interpreten[zaehler]= inorder->_interpret;
        titel[zaehler]= inorder->_titel;    
        laufzeiten[zaehler]= inorder->_ges_laufzeit;
        zaehler++;
    
        traverse( inorder->_right, interpreten, titel, laufzeiten);    
    }




die ausgabe erfolgt im klienten. Die funktion wird von einer anderen aufgerufen. Nun funktioniert die Funktion genau EINMAL wie gewünscht, gibt also sämtliche CDs korrekt aus.... will ich den Vorgang allerdings wiederholen, schmiert das Programm ab !

Will euch nicht mit dem ganzen Quellcode erschlagen und hoffe daher, dass die Informationen genügen ! wenn nicht schreibt es bitte, dann poste ich mehr davon!

Danke schon mal für eure bemühungen !


Bearbeitung:

jungs ... erst denken, dann posten, und zwar mit codetags!


Dieser Post wurde am 11.06.2006 um 22:36 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.06.2006, 17:31 Uhr
(un)wissender
Niveauwart


Hm, schwer zu sagen. Vielleicht haste Zähler nicht wieder auf 0 gesetzt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.06.2006, 17:58 Uhr
(un)wissender
Niveauwart


Würde es auch eher so machen

C++:
struct CDInfo
{
    std::string interpret, titel, laufzeiten;
    bool operator<(CDInfo const&) const;
};  
    
void traverse(CDInfoNode const* inorder, std::vector<CDInfo const* &infos)
{
    if(!inorder) //leaf sollte noch ok sein
    {
        return;
    }
    
    infos.push_back(inorder->cdInfo);
    traverse(inorder->_left, infos);
    traverse(inorder->_right, infos);
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.06.2006, 11:14 Uhr
somme



Grossartig ! Vielen Dank (un)wissender.... habe tatsächlich den Zaehler fälschlicherweise Ausserhalb definiert, wodurch die Fehlermeldung entstehen MUSSTE....

Habe ihn nun vor dem Funktionsaufruf auf 0 gesetzt -> voila ! Dass man da nicht selbst draufkommt Jedenfalls nochmal danke !
 
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: