Ладно, на мой взгляд, в вашей функции, как показано ниже.
void insertIntoBST(struct node** ptrtoroot, struct node** ptrtotemp){
if((**ptrtotemp).data <= (**ptrtoroot).data){
if((**ptrtoroot).leftchild != NULL){
insertIntoBST((*ptrtoroot).leftchild,(*ptrtotemp));
ptrto root - это двойной указатель, т.е. указатель на указатель, так что это делает (* ptrto root) указатель и здесь
(*ptrtoroot).leftchild should be replaced with "->" operator
like (*ptrtoroot)->leftchild
Во-вторых, при рекурсивных вызовах функция insertIntoBST принимает в качестве аргумента двойной указатель, поэтому вам необходимо передать адрес указателя здесь.
т.е. адрес указателя, возвращенного (* ptrto root ) -> leftchild из структуры вашего узла.
something like &((*ptrtoroot)->leftchild)
Я не полностью выполнил ваш код, но это должно работать.
То же самое касается второго параметра (* ptrtotemp).