सी ++ जुड़ा हुआ द्विआधारी खोज वृक्ष (DeleteTree)

वोट
0

मैं कार्य में से एक के लिए C ++ का उपयोग करते हुए एक द्विआधारी खोज वृक्ष को लागू करने की है। मैं कक्षा बना लिया है, और लागू करने का प्रयास किया InsertItem, PrintTree, DeleteTree वर्ग के लिए विधियों, मुझे लगता है कि मैं सब कुछ सही किया, लेकिन किसी कारण से मेरा कार्यक्रम क्रैश हो रहा है :(

यहाँ मेरी कोड है:

PrintTree विधि

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 विधि

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

विधि की मेरी अनुक्रम जब तक कार्यक्रम दुर्घटनाओं कॉल:

मैं आइटम सम्मिलित F,B,G,A,D,I,C,E,H: ठीक काम करता है

मैं फोन PrintTree(): ठीक काम करता है

मैं फोन DeleteTree(): ठीक काम करता है

मैं फोन PrintTree()फिर से: कार्यक्रम दुर्घटनाओं

किसी कारण से अभिव्यक्ति if(RootNode == NULL)सच नहीं लौटा रहा है के बाद DeleteTree()विधि कहा जाता है, तो कार्यक्रम कुछ है जो अस्तित्व में नहीं है और दुर्घटनाओं मुद्रित करने के लिए कोशिश करता है। मुझे यकीन है कि क्यों यह हो रहा है नहीं कर रहा हूँ, क्या मैं गलत यहाँ कर रहा हूँ?

छोटी या बडी सब तरह की मदद सराहनीय है।

07/11/2011 को 23:16
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

कॉलिंग "हटाएँ" सूचक बाहर शून्य नहीं है। आप क्या करना चाहते हैं जाएगा:

delete Node; 
Node = nullptr;

संपादित करें:

पता द्वारा सूचक पास करें ताकि आप संकेत झूलते को साफ के रूप में आप जा सकते हैं:

void BinarySearchTree<TItem>::DeleteTree(BinarySearchTreeNode *&node);
07/11/2011 को 23:20
का स्रोत उपयोगकर्ता

वोट
2

मुझे लगता है कि हटाने समारोह निम्नलिखित को बदला जाना चाहिए,

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

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

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

अगर मैं गलत हूं कृपया मुझे सही।

07/11/2011 को 23:28
का स्रोत उपयोगकर्ता

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