C ++ verknüpfen binären Suchbaum (DeleteTree)

stimmen
0

Ich habe einen binären Suchbaum für eine der Aufgaben unter Verwendung von C ++ zu implementieren. Ich habe die Klasse erstellt und versucht , das umzusetzen InsertItem, PrintTree, DeleteTree Methoden für die Klasse, ich glaube , ich habe alles richtig gemacht, aber aus irgendeinem Grund mein Programm stürzt immer wieder ab :(

Hier ist mein Code:

PrintTree Methode

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);
}

DeleteTree Methode

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;
}

Meine Sequenz von Methodenaufrufen, bis das Programm abstürzt up:

Ich lege Artikel F,B,G,A,D,I,C,E,H: funktioniert gut

Ich nenne PrintTree(): funktioniert gut

Ich nenne DeleteTree(): funktioniert gut

Ich rufe PrintTree()wieder: Programm stürzt

Aus irgendeinem Grunde der Ausdruck if(RootNode == NULL)nicht wahr Rückkehr nach der DeleteTree()Methode aufgerufen wird, so dass das Programm etwas zu drucken versucht , die nicht und stürzen nicht existiert. Ich bin mir nicht sicher , warum dies geschieht, was mache ich hier falsch?

Jedwedes Hilfe ist willkommen.

Veröffentlicht am 07/11/2011 um 23:16
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Calling „löschen“, um die Zeiger nicht null aus. Sie tun möchten:

delete Node; 
Node = nullptr;

BEARBEITEN:

Übergeben Sie den Mauszeiger nach Adresse, so dass Sie aufzuräumen können baumelnden Zeigern, wie Sie gehen:

void BinarySearchTree<TItem>::DeleteTree(BinarySearchTreeNode *&node);
Beantwortet am 07/11/2011 um 23:20
quelle vom benutzer

stimmen
2

Ich denke, die Löschfunktion in die folgenden geändert werden soll,

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

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

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

Bitte korrigieren Sie mich, wenn ich falsch bin.

Beantwortet am 07/11/2011 um 23:28
quelle vom benutzer

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