Я пытаюсь перегрузить оператор присваивания для моего Двоичного дерева поиска.
Example: tree1 = tree2
Я хочу удалить все узлы в tree1 и сделать глубокую копию всех узлов в дереве.
У меня уже есть функция:
Node* deepCopyTree(const Node *source)
, которая отлично работает.Я создал также эту функцию:
void deleteTree(Node* root)
{
if (root)
{
deleteTree(root->left);
deleteTree(root->right);
delete root;
}
}
, которая, как я вижу, отладка работает.Функция перегрузки оператора:
BST& BST::operator=(const BST &rhs)
{
DestroyRecursive(root);
deepCopyTree(rhs.root);
return *this;
}
И это приводит к ошибке при копировании. Я работаю над этим 10 часов, и это самая маленькая вещь, с которой я остался, и я хочу закончить ее.Пожалуйста, помогите :).
Это мой конструктор глубокого копирования:
BST::BST(const bST&rhs)
:root(deepCopyTree(rhs.root))
{
}
deepCopyTree возвращает узел *
struct Node
{
std::string value = "";
Node *left = nullptr;
Node *right = nullptr;
};
Деконструктор:
BST::~BST()
{
DeleteTree(this->root);
}
void DeleteTree(Node* root)
{
if (root)
{
DeleteTree(root->left);
DeleteTree(root->right);
delete root;
}
}