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);
           }

        }

Ответы (0 шт):