दो पुनरावर्ती एल्गोरिदम के बीच अंतर एक द्विआधारी खोज वृक्ष नष्ट करने के लिए

वोट
0

मैं इन दोनों एल्गोरिदम के बारे में एक प्रश्न है:

यह सामान्य रूप से काम करता है:

node* deleteTree(node* root)
{
    if(root != NULL)
    {
       deleteTree(root->left);
       deleteTree(root->right);
       deallocateNode(root);
    }
    return root=NULL;
}

यह नहीं:

void deleteTree(node* root)
{
   if(root != NULL)
   {
      deleteTree(root->left);
      deleteTree(root->right);
      deallocateNode(root);
   }
   root=NULL;
}

क्यूं कर? मैं निर्धारित करने की आवश्यकता rootके लिए nullतो BST के हटाने के बाद नोड सूचक नहीं आवंटित एक स्मृति को इंगित नहीं होंगे। मैं दूसरे एल्गोरिथ्म पसंद करते हैं समारोह की याद अधिक सहज ज्ञान युक्त है, क्योंकि।

सैद्धांतिक रूप से, दो एल्गोरिदम बराबर हैं लेकिन अगर मैं दूसरे एल्गोरिथ्म का उपयोग करें और मैं BST मुद्रित करने के लिए प्रयास करते हैं, कार्यक्रम एक पाश में चला जाता है।

14/04/2017 को 11:35
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

आप जब node *rootऔर आवंटित node = NULLयह बाहरी में अपने मूल्य को प्रभावित नहीं करेगा। आप सूचक मूल्य को संशोधित करना चाहते हैं, तो आप एक डबल सूचक पारित करने के लिए होगा।

कुछ इस तरह:

void deleteTree(node** root)
{
   if(*root != NULL)
   {
      deleteTree(&((*root)->left));
      deleteTree(&((*root)->right));
      deallocateNode(*root);
   }
   *root = NULL;
}

लेकिन मैं वास्तव में आप आवंटित करने के लिए की जरूरत नहीं लगता कि node = NULLआप इसे मुक्त कर के बाद से। तो, तुम सिर्फ असाइन कर सकते हैं node = NULLके बाद आप deleteTree फोन और आप डबल सूचक के साथ गड़बड़ की जरूरत नहीं होगी।

14/04/2017 को 11:47
का स्रोत उपयोगकर्ता

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