二叉树的建立与非递归遍历

我的没有输出

img

#include 
#include 
typedef struct Tree
{
    char data;
    struct Tree* lchild;
    struct Tree* rchild;
}Tree,*BiTree;

typedef struct
{
    int top;
    BiTree data;
}Stack,*Seqstack;

Seqstack Initstack()
{
    Seqstack s = (Seqstack)malloc(sizeof(Stack));
    if(s==NULL) return 0;
    else
    {
        s->top = -1;   
    }
    return s;
}

void Push(Seqstack s,Tree p)
{
    s->top++;
    s->data[s->top] = p;
}

int IsEmpty(Seqstack s)
{
    if(s->top ==-1) return 1;
    else return 0;
}

void Pop(Seqstack s,BiTree p)
{
    if(s->top == -1) return;
    *p = s->data[s->top];
    s->top--;
}

BiTree Create()
{
    BiTree T;
    char data;
    data = getchar();
    if(data == '#') T = NULL;
    else
    {
        T = (BiTree)malloc(sizeof(Tree));
        T->data = data;
        T->lchild = Create();
        T->rchild = Create();
    }
    return T;
}

void Preorder(BiTree T)
{
    Seqstack s;
    BiTree p = T;
    s = Initstack();
    while (p != NULL && !IsEmpty(s))
    {
        while(p!=NULL)
        {
            printf("%c",p->data);
            Push(s,*p);
            p = p->lchild;
        }
        if(!IsEmpty(s))
        {
            Pop(s,p);
            p = p->rchild;
        }
    }
}

void Inorder(BiTree T)
{
    Seqstack s;
    BiTree p;
    p = T;
    s = Initstack();
    while (p != NULL && !IsEmpty(s))
    {
        while (p!=NULL)
        {
            Push(s,*p);
            p = p->lchild;
        }
        if(!IsEmpty(s))
        {
            Pop(s,p);
            printf("%c",p->data);
            p = p->rchild;
        }
    }
}

int main()
{
    BiTree T = Create();
    Preorder(T);
    printf("\n");
    Inorder(T);
    return 0;
}