二叉树的层序遍历,但是报错显示不能转换是为什么


#include<stdio.h>
#include<stdlib.h>

//树 
typedef char BiElemType;
typedef struct BiTNode{
    BiElemType c;
    struct BiNode *lchild; 
    struct BiNode *rchild; 
}BiTNode,*BiTree;

//辅助队列
typedef struct tag{
    BiTree p;
    struct tag *pnext; 
}tag_t,*ptag_t;
 
 //层次建树 
int main(){
    //1.申请树的新节点与根结点 ,新节点用来插入新元素,根节点用来链接新节点
    BiTree pnew; 
    BiTree tree; 
    char c;
    //2.申请辅助队列,辅助队列是链队列,需要有头指针,尾指针,和新空间,还有总指向树要插入的元素的根节点的指针
    ptag_t phead=NULL;
    ptag_t ptail=NULL;
    ptag_t listpnew=NULL;
    ptag_t pcur;
    //3.要输入字符串  abcdefghij
    while(scanf("%d",&c)){ //循环输入 
        //1.循环输入的截至条件   读取到‘\n’ 
        if(c=='\n'){
             break;    
        }
        //2.为输入进来的元素申请储存空间,calloc申请空间,与malloc写法相似,calloc对申请出来的空间进行初始化 
        pnew = (BiTree)calloc(1,sizeof(BiTNode));
        pnew->c = c;
        listpnew = (ptag_t)calloc(1,sizeof(tag_t)); 
        listpnew->p = pnew;
        //3.判断是否是树的第一个结点
        if(tree==NULL){
            tree = pnew;
            phead = listpnew;
            ptail = listpnew;
            pcur = listpnew; 
        }else{
            ptail->pnext = listpnew;
            ptail =  listpnew;
            //4.将b结点放入树中
            if(NULL==pcur->p->lchild){ 
                pcur->p->lchild = pnew; 
            }else if(pcur->p->rchild==NULL){
                pcur->p->rchild = pnew;
                pcur = pcur->pnext; 
            } 
        } 
    } 
} 

报错点是 4.将b结点放入树中中的if语句的执行语句,
错误显示:

img

#include<stdio.h>
#include<stdlib.h>
 
//树 
typedef char BiElemType;
typedef struct BiTNode{
    BiElemType c;
    struct BiTNode *lchild; 
    struct BiTNode *rchild; 
}BiTNode,*BiTree;
 
//辅助队列
typedef struct tag{
    BiTree p;
    struct tag *pnext; 
}tag_t,*ptag_t;
 
//层次建树 
int main(){
    //1.申请树的新节点与根结点 ,新节点用来插入新元素,根节点用来链接新节点
    BiTree pnew; 
    BiTree tree = NULL; 
    char c;
    //2.申请辅助队列,辅助队列是链队列,需要有头指针,尾指针,和新空间,还有总指向树要插入的元素的根节点的指针
    ptag_t phead=NULL;
    ptag_t ptail=NULL;
    ptag_t listpnew=NULL;
    ptag_t pcur;
    //3.要输入字符串  abcdefghij
    while(scanf(" %c",&c)){ //循环输入 
        //1.循环输入的截至条件   读取到‘\n’ 
        if(c=='\n'){
             break;    
        }
        //2.为输入进来的元素申请储存空间,calloc申请空间,与malloc写法相似,calloc对申请出来的空间进行初始化 
        pnew = (BiTree)calloc(1,sizeof(BiTNode));
        pnew->c = c;
        listpnew = (ptag_t)calloc(1,sizeof(tag_t)); 
        listpnew->p = pnew;
        //3.判断是否是树的第一个结点
        if(tree==NULL) { 
            tree = pnew;
            phead = listpnew;
            ptail = listpnew;
            pcur = listpnew; 
        } else {
            ptail->pnext = listpnew;
            ptail = listpnew->pnext;
            //4.将b结点放入树中
            if(pcur->p->lchild==NULL){ 
                pcur->p->lchild = pnew; 
            } else if(pcur->p->rchild==NULL){
                pcur->p->rchild = pnew;
                pcur = pcur->pnext; 
            } 
        } 
    } 
}