二叉树的层次遍历,这段代码中提示了类型转换错误,但看了不知哪里错误

#include
#include
typedef struct bitnode
{
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
typedef struct
{
struct bitnode *data;
struct bitnode *next;
}queuenode;
typedef struct
{
queuenode *front,*rear;
}queue;

void initqueue(queue &q)
{
q.front=q.rear=(queuenode*)malloc(sizeof(queuenode));
q.front->next=NULL;
}

int isempty(queue q)
{
if(q.front==q.rear)
return 1;
else
return 0;
}

void enqueue(queue &q,bitnode *x)
{
queuenode *s=(queuenode *)malloc(sizeof(queuenode));
s->data=x;
q.rear->next=s;
q.rear=s;
}

void dequeue(queue &q,bitnode *x)
{
queuenode *p=q.front->next;
*x=p->data;
q.front->next=p->next;
if(q.rear==p)
{
q.rear=q.front;
}
free(p);
}

void leversort(bitree T)
{
queue q;
initqueue(q);
bitnode *p;
enqueue(q,T);
while(!isempty(q))
{
dequeue(q,p);
printf("%c ",*p);
if(p->lchild!=NULL)
{
enqueue(q,p->lchild);
}
if(p->rchild!=NULL)
{
enqueue(q,p->rchild);
}
}
}

void creatbitnode(bitree T)
{
char ch;
ch=getchar();
while(ch!='#')
{
T=(bitnode *)malloc(sizeof(bitnode));
T->data=ch;
T->lchild=NULL;
T->rchild=NULL;
creatbitnode(T->lchild);
creatbitnode(T->rchild);
}
}

int main()
{
bitree T;
creatbitnode(T);
levelsort(T);
return 0;
}

错误提示发下