关于C语言 先序递归建立二叉树和中序非递归遍历二叉树的问题,无法执行啊!!!
#include <stdio.h>#include <stdlib.h>
#define STACKINCREMENT 10
#define ok 1
#define error 0
#define STACK_INIT_SIZE 100
#define SElemType BiTree
#define TElemType char
#define Status int
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct{
SElemType *base,*top;
int stacksize;
}Sqstack;
Status Visit(TElemType e)
{
printf("%c\t",e);
return ok;
}
Status CreateBiTree(BiTree *T)
{
TElemType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
{
if(!(*T=(BiTree)malloc(sizeof(BiTNode))))
{
printf("存储分配出错!\n");
exit(1);
}
(*T)->data=ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return ok;
}
Status InitStack(Sqstack *s)
{
(*s).base=(SElemType*)malloc(sizeof(SElemType)*STACK_INIT_SIZE);
(*s).top=(*s).base;
(*s).stacksize=STACK_INIT_SIZE;
return ok;
}
Status StackEmpty(Sqstack *s)
{
if((*s).top==(*s).base)
return ok;
else
return error;
}
Status push(Sqstack *s,SElemType e)
{
if ((*s).top-(*s).base>=(*s).stacksize)
(*s).base=(SElemType*)realloc((*s).base,((*s).stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!((*s).base))
{
printf("存储分配出错!\n");
exit(1);
}
(*s).top=(*s).base+(*s).stacksize;
(*s).stacksize+=STACKINCREMENT;
*((*s).top++)=e;
return ok;
}
Status Pop(Sqstack *s,SElemType *e)
{
if((*s).top==(*s).base)
return error;
*e=*--(*s).top;
return ok;
}
Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e))
{
BiTree p; Sqstack s;
InitStack(&s);
p=T;
while(p||!StackEmpty(&s))
{
if(p)
{
push(&s,p);p=p->lchild;
}
else
{
Pop(&s,&p);
if(!Visit(p->data))
return error;
p=p->rchild;
}
}
return ok;
}
int main()
{
BiTree T;
printf("请用先序顺序输入二叉树数据:\n");
CreateBiTree(&T);
printf("中序非递归遍历二叉树显示如下:\n");
InOrderTraverse(T,Visit);
return 0;
}
运行后输入AB##C##,按说应该显示B A C才对,可是显示出错:只能显示出B然后报错,怎么回事啊,调了好几天了都没弄好,谁帮我解决下啊。。。。