C ++ gekoppeld binaire zoekboom (deleteBoom)

stemmen
0

Ik moet implementeren van een binaire zoekboom met behulp van C ++ voor één van de opdrachten. Ik heb de klas gemaakt en geprobeerd om de uitvoering van het InsertItem, PrintTree, deleteBoom methoden voor de klasse, ik denk dat ik deed alles goed, maar om wat voor reden mijn programma crasht steeds :(

Hier is mijn code:

PrintTree Method

template <class TItem>
void BinarySearchTree<TItem>::PrintTree()
{
    PrintTree(RootNode);
}

template <class TItem>
void BinarySearchTree<TItem>::PrintTree(BinarySearchTreeNode* Node)
{
    if(Node == NULL)
        return;

    cout << Node->Data << endl;
    PrintTree(Node->LeftChild);
    PrintTree(Node->RightChild);
}

deleteBoom Method

template <class TItem>
void BinarySearchTree<TItem>::DeleteTree()
{
    DeleteTree(RootNode);
}

template <class TItem>
void BinarySearchTree<TItem>::DeleteTree(BinarySearchTreeNode* Node)
{
    if(Node == NULL)
        return;

    DeleteTree(Node->LeftChild);
    DeleteTree(Node->RightChild);

    delete Node;
}

Mijn volgorde van de methode roept totdat het programma crasht:

Ik steek items F,B,G,A,D,I,C,E,H: werkt prima

Ik noem PrintTree(): werkt prima

Ik noem DeleteTree(): werkt prima

Ik noem PrintTree()weer: programma crasht

Om een of andere reden de expressie if(RootNode == NULL)niet terugkeert zo na de DeleteTree()methode wordt aangeroepen, zodat het programma probeert om iets dat niet bestaat en crashes te drukken. Ik weet niet zeker waarom dit gebeurt, wat doe ik hier verkeerd?

Enige en alle hulp wordt gewaardeerd.

De vraag is gesteld op 07/11/2011 om 23:16
bron van user
In andere talen...                            


2 antwoorden

stemmen
2

Calling "delete" niet nul uit de aanwijzer. U wilt doen:

delete Node; 
Node = nullptr;

BEWERK:

Passeer de pointer op adres, zodat u kunt opruimen bungelen pointers as you go:

void BinarySearchTree<TItem>::DeleteTree(BinarySearchTreeNode *&node);
antwoordde op 07/11/2011 om 23:20
bron van user

stemmen
2

Ik denk dat de wisfunctie moet worden gewijzigd in de volgende,

template <class TItem>
void BinarySearchTree<TItem>::DeleteTree(BinarySearchTreeNode** Node)
{
    if((*Node) == NULL)
        return;

    DeleteTree(&(*Node)->LeftChild);
    DeleteTree(&(*Node)->RightChild);

    delete (*Node);
    (*Node) = NULL;
}

Verbeter mij alsjeblieft als ik het fout heb.

antwoordde op 07/11/2011 om 23:28
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more