以下程序是二叉树先序遍历的非递归实现,但老是不能完全通过,请哪位高人帮一下我,我已经奋斗了很久了,拜托了!

#define MAX_TREE_SIZE 10
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>

struct BiTNode
{
    char data;
    BiTNode *lchild,*rchild;
};

typedef BiTNode* BiTree;

void CreateBiTree(BiTree &T)     //按先序次序建立树
{
    char c;
    scanf("%c",&c);
    if(c==' ')T=NULL;
    else
    {
        T=new BiTNode;
        if(!T)exit(1);
        T->data=c;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

int visitT(char e)
{
    printf("%c",e);
    return 1;
}

struct Stack
{
    BiTNode *base;
    BiTNode *top;
    int stacksize;
};

int InitStack(Stack &S)
{
    S.base=new BiTNode[MAX_TREE_SIZE];
    if(!S.base)exit(1);
    S.top=S.base;
    S.stacksize=MAX_TREE_SIZE;
    return 1;
}

int StackEmpty(Stack S)
{
    if(S.top==S.base)return 1;
    else return 0;
}

int GetTop(Stack S,BiTree e)
{
    if(S.top>S.base)
    {
        e=S.top-1;
        return 1;
    }
    else return 0;
}

int Push(Stack &S,BiTree &e)
{
    *S.top=*e;
    S.top++;
    return 1;
}

int Pop(Stack S,BiTree &e)
{
    if(S.top==S.base)
        return 0;
    S.top--;
    e=S.top;
    return 1;
}

int PreOrderTraverse(BiTree T)//非递归实现
{
    Stack S;
    InitStack(S);
    while(T||!StackEmpty(S))
    {
        if(T)
        {
            visitT(T->data);
            Push(S,T);
            T=T->lchild;
        }
        else
        {
            Pop(S,T);
            T=T->rchild;
        }

    }
    return 1;
}

void PO(BiTree T)      //递归实现
{
    if(T)
    {
        visitT(T->data);
        PO(T->lchild);
        PO(T->rchild);
    }
}

void main()
{
    BiTree T;
    CreateBiTree(T);
        PO(T);
    PreOrderTraverse(T);
}