void insert(int key, node* pt)
Like I said earlier, the 'pt' is a by value parameter. You can change it to point to the moon, but that will not change the caller's pointer at all.
if (*pt == NULL){
node* n = new node;
n->pl = NULL;
n->pr = NULL;
n->key = kkey;
*pt = &n;
}
This should not even compile. Line 40 should be *pt = n;
If "it still doesn't work" means "I can't even get this code to compile," then say that and supply the error messages you get. If it doesn't, describe what you expect to happen and how what actually happens differs from your expectation. "It doesn't work" is about helpful as someone telling you "Yes, I could make it work."
You're making it hard for people to help you. Don't do that unless you don't like being helped.
It compiles, but the console crushes. pt is double pointer, so *pt = &n i suppose means that the pointer in the middle (pointer -> pointer->node) points to the node. Am I wrong?