Έχω μια ερώτηση σχετικά με αυτές τις δύο αλγορίθμους:
Αυτό λειτουργεί κανονικά:
node* deleteTree(node* root)
{
if(root != NULL)
{
deleteTree(root->left);
deleteTree(root->right);
deallocateNode(root);
}
return root=NULL;
}
Αυτό nope:
void deleteTree(node* root)
{
if(root != NULL)
{
deleteTree(root->left);
deleteTree(root->right);
deallocateNode(root);
}
root=NULL;
}
Γιατί; Θα πρέπει να ρυθμίσετε το rootσε nullτόσο ο δείκτης του κόμβου μετά τη διαγραφή της BST δεν θα οδηγούν σε μια μνήμη που δεν έχει ανατεθεί. Προτιμώ το δεύτερο αλγόριθμο, διότι η ανάκληση της λειτουργίας είναι πιο διαισθητικό.
Θεωρητικά, οι δύο αλγόριθμοι είναι ισοδύναμες, αλλά αν μπορώ να χρησιμοποιήσω το δεύτερο αλγόριθμο και προσπαθώ να εκτυπώσετε το BST, το πρόγραμμα πηγαίνει σε ένα βρόχο.













