Baumstruktur



  • Hallo @all!

    Wie im Titel zu sehen, habe ich ein Problem mit einer Baumstruktur, welche ich für ein Menü benötige. Ich benötige etwa folgenden Aufbau:
    Jeder Knoten hat eine Verknüpfung zum nächsten (untergeordneten) Knoten sowie zum Knoten unter ihm (auf gleicher Ebene).

    Mit folgendem Code habe ich eine Interpretation versucht:

    class cItemEntry {
    public:
        cItemEntry( int status, int bitmap_num)
        :   Status(status), Bitmap_num( bitmap_num)
        {
            Next = NULL;
            Bottom = NULL;
        }
    
    	int Status;		// der Status
    	int Bitmap_num;		// der Index für die Nummer
    	cItemEntry *Next;	// das Element in der Ordnung darunter (rechts)
    	cItemEntry *Bottom;	// Element unten
    };
    
    cItemEntry* InsertEntry( cItemEntry *basis, int status, int bitmap_num)
    {
        cItemEntry *entry = new cItemEntry( status, bitmap_num);
    
        if( basis->Next == NULL)
        {
            basis->Next = entry;
        }
        else  // hier kommt das Problem!
        {
            cItemEntry *tmp = basis->Next;
            do {
                tmp = tmp->Bottom;
            } while( tmp != NULL);
            tmp = entry;
        }
        return entry;
    }
    

    Mit meiner Version kann ich immer nur einen Knoten pro Basisknoten erstellen.
    Wenn die Basis bereits einen Nachfolger hat, soll jedoch ein Unterpunkt erstellt werden.
    Ich frage mich, wieso der else-Block nicht so funktioniert, wie ich es mir vorstelle?

    Danke für eure Hilfe! :xmas1:



  • cItemEntry *tmp = basis->Next;
    do {
       tmp = tmp->Bottom;
    } while( tmp != NULL);
    tmp = entry;
    

    Du gehst den Baum solange runter bis tmp null ist. Danach weist du tmp noch entry zu. Mit der Datenstruktur passiert währenddessen gar nichts.

    Edit: Na gut, ich weiß immer nicht, ob ich nur den Fehler auflisten soll, oder schon eine Lösung geben -.-

    cItemEntry *elem = basis;
    
    while( elem->next ) {
       elem = elem->next;
    }
    
    elem->next = entry;
    


  • Okay, mit

    cItemEntry *elem = basis->Next;
    
    while( elem->Bottom ) {
      elem = elem->Bottom;
    }
    elem->Bottom = entry;
    

    erhalte ich das was ich wollte. 😉

    Danke!



  • Ach siehst du, sorry, bin nicht mehr so fit... sehe hier nur noch eckige, geschwungene und runde Klammern.


Anmelden zum Antworten