C建立二叉搜索树出现段错误

题目链接:https://pintia.cn/problem-sets/1211841066264109056/problems/1236509430527590400

判断是不是同一棵二叉搜索树
写的代码如下:(在自己编译器上可以通过,但是在OJ上显示段错误,希望大佬指点一下)

#include<stdio.h>
#include<malloc.h>
typedef struct BINODE{
    int value;
    struct BINODE *lchild,*rchild;
}BiTNode,*BiTree;
int flag=1;
//建立二叉搜索树
BiTNode *BuildBiTree(BiTree &T,int n,int a[]){
    int i,j;
    T=(BiTNode *)malloc(sizeof(BiTNode));
    T->value=a[0];  
    BiTree p=T,q,pre;
    p->lchild=NULL;
    p->rchild=NULL;
    for(i=1,j=1;j<n;i++){
        q=(BiTNode *)malloc(sizeof(BiTNode));
        q->value=a[j];
        pre=p;
        if(a[j]<=p->value){
            p=p->lchild;
            if(p==NULL){
                pre->lchild=q;
                j++; 
                q->lchild=NULL;
                q->rchild=NULL;
                p=T;
            }
        }
        else{
            p=p->rchild;
            if(p==NULL){
                pre->rchild=q;
                j++;
                q->lchild=NULL;
                q->rchild=NULL;
                p=T;
            }
        }
    }
}
//两棵树同时遍历进行判断
void InOrder(BiTree T,BiTree TT){
    if(T && TT){
        InOrder(T->lchild,TT->lchild);
        if(T->value!=TT->value) flag=0;
        InOrder(T->rchild,TT->rchild);
    }
}
int main(){ 
    int n=-1,k,i;
    int a[15];
    int b[15];  
    while(n!=0){    
        BiTree T=NULL,TT=NULL;  
        scanf("%d",&n);
        if(n!=0){
            scanf("%d",&k);
            for(i=0;i<n;i++){
                scanf("%d",&a[i]);      
            }
            BuildBiTree(T,n,a);
            while(k--){
                flag=1;
                for(i=0;i<n;i++){
                    scanf("%d",&b[i]); 
                }   
                BuildBiTree(TT,n,b);
                InOrder(T,TT);
                if(flag==1) printf("Yes\n");
                else  printf("No\n");               
            }
        }
    }
    return 0;
}

自己摸索很久了,发现不了问题,如果能解决,感激不尽!!

图片说明编译结果