Suchbaum - Speicherfreigabe



  • Hallo Leute,

    ich hab ein Problem bei meinem Programm. Ich hab soweit das Programm fertig, muss aber noch die Speicherfreigabe beim Löschen des Baumes in die Destruktoren einbinden. Aber ich komme einfach net weiter.

    Ich bin offen für jegliche Lösungsvorschläge, hoffe ihr könnt mir weiterhelfen.

    Suchbaum.cpp

    //---------------------------------------------------------------------------
    #include <string.h>
    #include <stdlib.h>
    
    #include "CBaum.h"
    #include "CBaum.cpp"
    
    //---------------------------------------------------------------------------
    void main()
    {
    	CBaum* pBaum;
    
    	pBaum = new CBaum();
    
    	pBaum->Einfuegen("dies", 1);
    	pBaum->Einfuegen("und", 1);
    	pBaum->Einfuegen("das", 1);
    
    	pBaum->Einfuegen("das", 2);
    	pBaum->Einfuegen("ist", 2);
    	pBaum->Einfuegen("der", 2);
    	pBaum->Einfuegen("Anfang", 2);
    
    	pBaum->Einfuegen("das", 3);
    	pBaum->Einfuegen("ist", 3);
    	pBaum->Einfuegen("das", 3);
    	pBaum->Einfuegen("Ende", 3);
       //pBaum->Optimieren();
       //pBaum->HaufigstesWort();
    
    	delete pBaum;
       system ("pause");
    	return;
    }
    //---------------------------------------------------------------------------
    

    CBaum.cpp

    #include <string.h>
    #include <stdlib.h>
    #include "CBaum.h"
    
    //------------------------------------------------------------------------------
    CBaum::CBaum()
    {
    	cWurzel = NULL;
    	sMaxWort = "";
    	iMaxZahl = 0;
    };
    
    //------------------------------------------------------------------------------
    CBaum::~CBaum()
    {
    delete cWurzel;
    };
    
    //------------------------------------------------------------------------------
    void CBaum::EinfuegenBaum(CKnoten* xKnoten, char* xWort, int xSeite)
    {
    	int vergleich = strcmpi(xWort, xKnoten->sWort);      //Kleiner < 0, Gleich = 0, Größer > 0
    
    	if (vergleich < 0)
    		if (xKnoten->cLinks == NULL)
    			xKnoten->cLinks = new CKnoten(xWort, xSeite);
    		else
    			EinfuegenBaum(xKnoten->cLinks, xWort, xSeite);
    
    	else if (vergleich > 0)
    		if (xKnoten->cRechts == NULL)
    			xKnoten->cRechts = new CKnoten(xWort, xSeite);
    		else
    			EinfuegenBaum(xKnoten->cRechts, xWort, xSeite);
    	else // vergleich == 0
    		xKnoten->cSeiten->EinfuegenSeite(xSeite);
    };
    
    //------------------------------------------------------------------------------
    void CBaum::Einfuegen(char* xWort, int xSeite)
    {
       if(xWort=="der"||xWort=="die"||xWort=="das")
       {
       }
       else
       {
    	if (cWurzel == NULL)
    		cWurzel = new CKnoten(xWort, xSeite);
    	else
    		EinfuegenBaum(cWurzel, xWort, xSeite);
    	}
    };
    //------------------------------------------------------------------------------
    /*void CBaum::Optimieren()
    {
    //while (CWurzel->sWort!=NULL||this->sWort!=NULL)
    while (CWurzel->sWort!=NULL||this->sWort!=NULL)
    	{
    		if(cWurzel->sWort=="der"||cWurzel->sWort=="die"||cWurzel->sWort=="das")
    		{
       	delete this;
    		}
           this->Optimieren();
    	}
    
    }
    
    */
    
    //------------------------------------------------------------------------------
    CKnoten::CKnoten(char* xNeuesWort, int xNeueSeite)
    {
    	CListe* ptr = NULL;
    	sWort = xNeuesWort;
    	cSeiten = new CListe(xNeueSeite, ptr);
    	cLinks = NULL;
    	cRechts = NULL;
    };
    
    //------------------------------------------------------------------------------
    CKnoten::~CKnoten()
    {
    delete cSeiten;
    delete cLinks;
    delete cRechts;
    };
    
    //------------------------------------------------------------------------------
    CListe::CListe(int xNeueSeite, CListe* xListe)
    {
    		this->iSeite = xNeueSeite;
    		this->cNext = xListe;
    }
    
    //------------------------------------------------------------------------------
    CListe::~CListe()
    {
    delete cNext;
    };
    
    //------------------------------------------------------------------------------
    void CListe::EinfuegenSeite(int xNeueSeite)
    {
    	CListe* NeueListe;
    
    	if (cNext == NULL || xNeueSeite < cNext->iSeite)
    	{
    		NeueListe = new CListe(xNeueSeite, cNext);
    		cNext = NeueListe;
    	}
    	else
    		cNext->EinfuegenSeite(xNeueSeite);
    };
    
    //------------------------------------------------------------------------------
    int CListe::GibAnzahl()
    {
    	if (cNext == NULL)
    		return 1;
    	else
    		return (cNext->GibAnzahl() +1);
    };
    

    CBaum.h

    #ifndef CBaumH
    #define CBaumH
    
    //==============================================================================
    class CListe
    {
    	private:
    		int iSeite;
    		CListe* cNext;
    
    	public:
    		CListe(int, CListe*);
    		~CListe();
    
    		void EinfuegenSeite(int);
    		int GibAnzahl();
    };
    
    //==============================================================================
    class CKnoten
    {
    	private:
    
    	public:
    		char* sWort;
    		CListe* cSeiten;
    
    		CKnoten* cLinks;
    		CKnoten* cRechts;
    
    		CKnoten(char*, int);
    		~CKnoten();
    };
    
    //==============================================================================
    class CBaum
    {
    	private:
    		CKnoten* cWurzel;
    		char* sMaxWort;
    		int iMaxZahl;
    
    	public:
    		CBaum();
    		~CBaum();
    
    		void Einfuegen(char*, int);
    		void EinfuegenBaum(CKnoten*, char*, int);
    		void Loeschen();
        //  void Optimieren();
    		char* HaufigstesWort();
    };
    #endif
    

    MfG Tom


Anmelden zum Antworten