If you change 
else if  (root-> right == NULL)
to just 
else
Then it would have the effect of always adding to the right.  
If you want it to randomly pick, add a call to srand outside this function.  
srand(time(NULL));
Then in this function, call 
else if (rand() > MAX_RAND / 2) {
    root->right = insert(root->right, key);
} else {
    root->left = insert(root->left, key);
}
at the end of your existing if/else structure.
See also:  
If your tree tracks its height at each node, you could add after your null checks something like 
else if (root->left->height <= root->right->height) {
    root->left = insert(root->left, key);
} else {
    root->right = insert(root->right, key);
}
That would keep the tree balanced automatically.  But it requires additional code to manage the height.  E.g. 
root->height = 1 + ((root->left->height > root->right->height) ? root->left->height : root->right->height);
I leave it up to you whether that additional overhead is worth it.  
The people suggesting using a heap are suggesting using the indexes as the ordering.  This is kind of useless as a heap, but it would make a balanced binary tree.  So the root node would be the first inserted and the most recent inserted would be the rightmost leaf.