放在pta全是段错误 求解

#include <stdio.h>
#include <stdlib.h>
typedef int Status;
typedef char TElemType;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct BiTNode
{//树二叉链表的存储结构
    TElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct
{//栈的存储结构
    BiTree *base;
    BiTree *top;
    int stacksize;
}SqStack;
Status InitStack(SqStack &s)
{//初始化栈
    s.base=(BiTree *)malloc(STACK_INIT_SIZE * sizeof(BiTree));
    if(!s.base)  exit(OVERFLOW);
    s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
    return OK;
}
Status StackElemty(SqStack &s)
{//判断栈是否为空
    if(s.base!=s.top)
        return ERROR;
    return OK;
}
Status Push(SqStack &s,BiTree e)
{//将元素e进栈
    if(s.top-s.base>=s.stacksize)
    {  //追加分配
        s.base=(BiTree *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(BiTree));
        if(!s.base)  exit(OVERFLOW);
        s.top=s.base+s.stacksize;
        s.stacksize+=STACKINCREMENT;
    }
    *s.top++=e;
    return OK;
}
Status Pop(SqStack &s,BiTree &e)
{//出栈,栈顶元素返回给e
    if(s.top==s.base)  return ERROR;
    e=*--s.top;
    return OK;
}
Status CreateBiTree(BiTree &t)
{//用先序建立一个二叉树,空格表示空树
    TElemType ch;
    scanf("%c",&ch);
    if(ch==' ') t=NULL;
    else
    {
        if(!(t=(BiTNode *)malloc(sizeof(BiTNode))))
            exit(OVERFLOW);
        t->data=ch;            //生成根结点
        CreateBiTree(t->lchild);  //构造左子树
        CreateBiTree(t->rchild);  //构造右子树
    }
    return OK;
}
Status Visit(TElemType e)
{//访问函数
    printf("%c",e);
    return OK;
}
Status InOrderTraverse(BiTree t,Status(* Visit)(TElemType e))
{//用非递归方式实现中序遍历,对每个元素调用函数visit
    SqStack s;
    InitStack(s);  //建立一个栈存储二叉树的结点
    BiTree p=t;
    while(p||!StackElemty(s))
    {
        if(p)
        {//根指针进栈,遍历左子树
            Push(s,p);
            p=p->lchild;
        }
        else
        {//根指针退栈,访问根结点,遍历右子树
            Pop(s,p);
            if(!Visit(p->data))   return ERROR;
            p=p->rchild;
        }
    }
    printf("\n");
    return OK;
}
Status PostorderTraverse(BiTree t)
{//用递归方式实现后序遍历
   if(t)
   {
       PostorderTraverse(t->lchild); //遍历左子树
       PostorderTraverse(t->rchild); //遍历右子树
       printf("%c",t->data); //访问结点
   }
   return OK;
}
int height(BiTNode* node)
{
   if (node==NULL)
       return 0;
   else
   {
       // 计算左子树的高度和右子树的高度
       int lHeight = height(node->lchild);
       int rHeight = height(node->rchild);
       // 返回二者较大者加1
       if (lHeight > rHeight)
           return(lHeight+1);
       else return(rHeight+1);
   }
}
int main()
{
    BiTree t;
    CreateBiTree(t);
    PostorderTraverse(t);
    printf("\n");
    printf("%d",height(t));
    return 0;
    
}

 

运行代码,报错内容是什么啊