i am having a little trouble removing a node with two children from a binary search tree. my algorithms kinda working in that i find a bottom left successor and swap they keys with the node im deleting but then i cant figure out how to delete this successor using my recursive implementation. I have done it before using java, but it was quite a different implementation and i can quite figure this one out.

Code:

struct bstnode{
char *key;
bst left;
bst right;
};
bst bst_remove(bst b, char *s){
if( b == NULL ){
return b;
} if( strcmp(b->key, s) == 0 ){
if( b->left == NULL && b->right == NULL ){
free(b->key);
free(b);
return NULL;
} else if( b->left == NULL || b->right == NULL ){
if( b->left != NULL ){
free(b->key);
return b->left;
}else if( b->right != NULL ){
free(b->key);
return b->right;
}
} else{
bst right = b->right;
while( right->left != NULL ){
right = right->left;
}
/* Need code in here to delete successor!?
why cant i simply do it like this:
&right = NULL; */
strcpy(b->key,right->key);
return b;
}
} else if( strcmp( b->key, s ) < 0 ){
b->right = bst_remove(b->right,s);
} else if( strcmp( b->key, s ) > 0 ){
b->left = bst_remove(b->left,s);
}
return b;
}