Προσπαθώ να γράψω ένα πρόγραμμα που παίρνει σε χορδές και τα τοποθετεί σε ένα δυαδικό δέντρο αναζήτησης κατά αλφαβητική σειρά φορά αυτά εισάγονται στο δέντρο, ένας χρήστης ζητά μια λέξη που θέλετε να διαγράψετε, διαγράφοντας έτσι ότι κόμβο από το δέντρο, και στη συνέχεια, εξόδου το δέντρο χωρίς αυτόν τον κόμβο πίσω στην τάξη.
Όλα λειτουργούν γι 'αυτό μέχρι την λειτουργία διαγραφής, η λειτουργία διαγραφής κάνει δουλειά, αλλά πολύ παράξενο του πώς διαγράφει. Νομίζω ότι σήμερα διαγράφει μια πλήρη πλευρά του δέντρου, γιατί όταν μπορώ να διαγράψω την τελευταία λέξη, συνήθως λειτουργεί. Θα ανεβάσετε λειτουργία διαγραφής μου και αν χρειάζεται να γίνουν περισσότερα μπορώ να φορτώσετε το υπόλοιπο του κωδικού μου.
Ευχαριστώ!
template<typename T> void Delete(TreeNode<T>*& root, const T& data)
{
if (root == NULL)
return;
if(data < root->Value)
return Delete(root->Left, data);
else if (root->Value > data)
return Delete(root->Right, data);
else
{
TreeNode<T>* old_root = root;
if (root->Left == NULL)
{
root = root->Right;
}
else if (root->Right == NULL)
{
root = root->Left;
}
else
{
replace_parent(old_root, old_root->Left);
}
delete old_root;
}
};
template<typename T> void replace_parent(TreeNode<T>*& old_root, TreeNode<T>*& root)
{
if (root->Right != NULL)
{
replace_parent(old_root, root->Right);
}
else
{
old_root->Value = root->Value;
old_root = root;
root = root->Left;
}
};














