Salve ragazzi stò creando delle functions per cancellare un elemento in un BST.

Io ho creato queste functions:
codice:
/* MAIN */
        case 5:
            node=root;
            cout<<"Qual'è l'elemento che vuoi cancellare?"<<endl;
            cin>>elemento;
            // Ricerco il nodo da cancellare, restituendo il puntatore al
            // nodo da cancellare e il puntatore al padre del nodo da cancellare
            bst_node_search(root, elemento, node, parent);
            // Cancello il nodo
            bst_delete(root, elemento);
            break;
/* END MAIN */

/* Ricerca di un node di elem x */
tree bst_node_search(tree *root, int elem, tree *node, tree *parent)
{
    /* Fin quando il node è diverso da NULL e l'informazione
     * del node è diverso dall'elemento da cancellare */
    while ( node != NULL && node->info != elem ){
        parent=node;

        if ( node->info > elem )
            node=node->left;
        else
            node=node->right;
    }
}


/* Cancellazione di un elemento nel bst */
tree bst_delete(tree *&root, int elem)
{
    if ( node == NULL ) {
        cout<<"Nessuna cancellazione può essere fatta!";
    } else if ( parent == NULL ) {
            delete_right_subtree(node, parent, root);
    } else if ( elem < parent->info ) {
            delete_left_subtree(node, parent, root);
    } else{
            delete_right_subtree(node, parent, root);
    }
}


/* Cancellazione del sottoalbero destro */
tree delete_right_subtree(tree *node, tree *parent, tree *root)
{
    tree *new_parent=parent;
    tree *new_node=node->right;

    if ( parent != NULL )
        parent->right=node->right;
    else
        root=node->right;

    while ( new_node != NULL ){
        new_parent=new_node;
        new_node=new_node->left;
    }

    if ( node->right != NULL ){
        if ( new_parent != NULL )
            new_parent->left=node->left;
        else
            root=node->left;
    }
    else if ( parent != NULL )
    {
        parent->right=node->left;
    } else
    {
        root=node->left;
    }
}


/* Cancellazione del sottoalbero sinistro */
tree delete_left_subtree(tree *node, tree *parent, tree *root)
{
    tree *new_parent=parent;
    tree *new_node=node->left;

    if ( parent != NULL )
        parent->left=node->left;
    else
        root=node->left;

    while ( new_node != NULL ){
        new_parent=new_node;
        new_node=new_node->right;
    }

    if ( node->right != NULL ){
        if ( new_parent != NULL )
            new_parent->right=node->right;
        else
            root=node->right;
    }
    else if ( parent != NULL )
    {
        parent->left=node->right;
    } else
    {
        root=node->right;
    }
}
Il compilatore, mi restituisce 5 errori, giustamente, che sono i seguenti:
codice:
Compiling: C:\Users\Gaten\Desktop\bst.cpp
C:\Users\Gaten\Desktop\bst.cpp: In function 'tree bst_delete(tree*&, int)':
C:\Users\Gaten\Desktop\bst.cpp:230: error: expected primary-expression before '==' token
C:\Users\Gaten\Desktop\bst.cpp:232: error: 'parent' was not declared in this scope
C:\Users\Gaten\Desktop\bst.cpp:233: error: expected primary-expression before ',' token
C:\Users\Gaten\Desktop\bst.cpp:235: error: expected primary-expression before ',' token
C:\Users\Gaten\Desktop\bst.cpp:237: error: expected primary-expression before ',' token
Process terminated with status 1 (0 minutes, 0 seconds)
5 errors, 0 warnings
Dovrei passare alla function "bst_delete", le variabili "parent" e "node" che ho nella function "bst_node_search"(Teoricamente questa funzione, cerca il nodo che dev'essere cancellato e il rispettivo padre, dopodichè queste info devo passarle alla function bst_delete, che talvolta elimina il nodo), qualcuno può aiutarmi a completare?