第一次接触数据结构编程,问题是用递归建立二叉树,用非递访问二叉树,问题好像都是出在那几个栈的操作函数上,可以看看问题出在哪吗


#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct BiTNode//树的定义 
{
    char date;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

typedef struct//栈的定义 
{
    int *base;
    int *top;
    int stacksize;
}SqStack;

void InitStack(SqStack &S)//初始化栈 
{
    S.base=(int *)malloc(100*sizeof(char)); 
    S.top=S.base;
    S.stacksize=100;
}

bool StackEmpty(SqStack S)//判断栈空 
{
    if(S.top==S.base)
        return 1;
    else
        return 0;
}

bool Push(SqStack &S,char e)//入栈 
{
    if(S.top-S.base==S.stacksize)
        return 0;
    *S.top++=e;
    return 1;
}

bool Pop(SqStack &S,char &e)//出栈 
{
    if(S.top==S.base);
        return 0;
    e=*--S.top;
    return 1;
 } 

void creatBiTNode(BiTree &bt)//顺序创建二叉树 
{
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        bt=0; 
    else{
        bt=(BiTNode*)malloc(sizeof(BiTNode));
        bt->date=ch;
        creatBiTNode(bt->lchild);
        creatBiTNode(bt->rchild);
    }
}

void preorder(BiTree &bt)//顺序非递归访问二叉树 
{
    BiTNode *p;
    SqStack *st;
    InitStack(st);
    p=bt;
    while(!StackEmpty(st)||p!=0)
    {
        while(p!=0)
        {
            printf("%c",p->date);
            Push(st,p);
            p=p->lchild;    
        }
        if(!StackEmpty(st))
        {
            Pop(st,p);
            p=p->rchild;
        }
    }
}

int main()
{
    return 0;
}