Функция работает с копией указателя на узел root Двоичного дерева поиска. Изменение копии в этом операторе
BST=(BinTree)malloc(sizeof(struct TNode));
не влияет на исходный указатель, переданный функции в качестве аргумента. Необходимо присвоить возвращенный указатель из функции исходному указателю на узел root дерева бинарного поиска, например,
BinTree root = NULL;
root = Insert( root, X );
В этих операторах
BST->Left = Insert(BST->Left,X);
BST->Right = Insert(BST->Right,X);
вы выполняете назначение данных, членов Left и Right, которые передаются в thj-функцию по ссылке через указатель BST.