数据结构二叉树层次遍历问题

写了一个二叉树层次遍历但是输出的时候总是程序有问题,我用#作为空指针,
例如当我输入ABC##DE#G##F###,一直循环输出B,而不是ABCDEGF

 typedef struct BiTree
{
     char data;
     struct BiTree *lchild;
     struct BiTree *rchild;
}BiTree;

void visit(BiTree *T)
{
    if((T->data)!='#')
        cout<<T->data<<" ";
}

int CreatTree(BiTree *&T)
{
    char data;
    cin>>data;
    if(data=='#')
        T=NULL;
    else
    {
        T=new BiTree;
        T->data=data;
        CreatTree(T->lchild);
        CreatTree(T->rchild);
    }
    return 0;
}
void level(BiTree *p)
{
    int front,rear;
    BiTree *que[maxsize];
    front=rear=0;
    BiTree *q;
    if(p!=NULL)
    {
        rear=(rear+1)%maxsize;
        que[rear]=p;
        while(front!=rear)
        {
            front=(front+1)%maxsize;
            q=que[front];
            visit(q);
            if(p->lchild!=NULL)
            {
                rear=(rear+1)%maxsize;
                que[rear]=p->lchild;
            }
            if(p->rchild!=NULL)
            {
                rear=(rear+1)%maxsize;
                que[rear]=p->rchild;
            }
        }
    }
}

#include
#include

#define MAX_SIZE 100

typedef char ElemType;
typedef struct BiTree
{
ElemType elem;
BiTree* LChild;
BiTree* RChild;
}BirTree,*PBiTree;

typedef struct Queue
{
i......
答案就在这里:【数据结构】二叉树的层次遍历
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

参考:http://my.oschina.net/u/2260265/blog/345294

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。