源代码 及错误如下
#include<stdio.h>
#include<stdlib.h>
typedef int TElemType ;
#define ERROR 0;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define Status int
//定义栈
typedef struct {
int *base;
int *top;
int stacksize;
}SqStack;
//二叉链表存储表示
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
//构造空栈
int initstack (SqStack &s){
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base)
exit(0);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 0;}
//判断是否为空
Status StackEmpty(SqStack S){
if(S.top==S.base) return 1;
return 0;}
//先序遍历创建二叉树
BiTree creatbitree(){
BiTree T;
TElemType ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;//#代表空格字符
else{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=ch;//生成根结点
T->lchild=creatbitree();//生成左子树
T->rchild=creatbitree();//生成右子树
}
return T; }
//入栈
Status push(SqStack &s, int &e)
{
if((s.top-s.base)>=s.stacksize){
s.base=(int*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
if(!(s.base))
exit(1);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
return 0; }
//出栈
Status pop(SqStack &s,int &e){
if(s.top==s.base)
return 1;
e=*--s.top;
return 0;}
//中序非递归遍历的
Status inorder(BiTree T,Status (*visit)(TElemType)){
SqStack s;
initstack(s);
BiTree p=T;
while(p||!StackEmpty(s)){
if(p){
push(s,p);
p=p->lchild;}
else{
pop(s,p);
if(!visit(p->data)) return 0;
p=p->rchild;}}
return OK;}
Status PrintElement(TElemType e){
printf("%d",e);
return 0;}
int main(){
BiTree T;
printf("请按照先序遍历输入二叉树(#代表空子树):\n");
T=creatbitree();
printf("二叉树创建成功!\n");
printf("\n中序非递归遍历:\n");
inorder(T,PrintElement);
return 0;}