C++ Удаление узла из дерева
Написал функцию удаления узла дерева по ключу. Элемент находит но не удаляет (в случае наличии двух наследников)
template<typename T>
inline void Tree<T>::delkey(T key, Node<T>* node)//8
{
if (node != nullptr) {
if (node->key == key) { //если ключ найден
if (node->right == nullptr&&node->left == nullptr) { //если наследников нет
cout << "key: " << node->key << " data: " << node->data << " deleted.\n";
delete node;
}
if (node->right != nullptr&&node->left == nullptr) { //если только 1 наследник справа
cout << "key: " << node->key << " data: " << node->data << " deleted.\n";
node = node->right;
}
if (node->right == nullptr&&node->left != nullptr) { //если только один наследник сдева
cout << "key: " << node->right->key << " data: " << node->right->data << " deleted.\n";
node = node->left;
}
else { //если оба наследники
cout << "key: " << node->key << " data: " << node->data << " deleted.\n";
cout << "also key: " << node->left->key << " data: " << node->left->data << " deleted.\n";
if (node->right->left == nullptr) {
node->right->left = node->left;
node = node->right;
}
else {
if (node->left->key > node->right->left->key) {
node->right->right = node->right->left;
node->left->right = node->left;
node = node->right;
}
else {
node->right->right = node->left;
node = node->right;
}
}
}
else {
if (key > node->key)
delkey(key, node->left);
else
delkey(key, node->right);
}
}