二叉搜索树创建失败不知道为什么?

问题遇到的现象和发生背景

通过不断插入创建一个二叉搜索树,无法遍历输出

问题相关代码,请勿粘贴截图
#include

using namespace std;

typedef struct BSTNode
{
  int data;
  struct BSTNode* lchild,*rchild;
}*BSTree;
BSTree T;  // 定义一棵二叉搜索树

void InsertBST(BSTree &T,int x)   // 插入
{
    if(!T)   // 空结点,动态申请一个地址
    {
        BSTNode *S = new BSTNode;
        S->data = x;
        S->lchild=S->rchild=NULL;
        T=S;
    }
    else if(xdata) InsertBST(T->lchild,x);  // 比根节点小,插入到左子树
    else if(x>T->data) InsertBST(T->rchild,x);  // 比根节点大,插入到右子树
}
void PreOrderTraversal(BSTree T)  // 先序遍历
{
    if(!T) return;
    printf(" %d",T->data);
    PreOrderTraversal(T->lchild);
    PreOrderTraversal(T->rchild);
}
int main()
{
   for(int i=0;i<9;i++)
   {
     int x;
     cin>>x;
     InsertBST(T,x);
   }
   PreOrderTraversal(T);
   return 0;
}

运行结果及报错内容

img

T没有初始化