帮忙看看这个二叉树程序,拜托了!!
这是我写的一个二叉树程序,编译时没有错误,但是一运行就不行了,也不知道错在哪里
各位大哥、大姐帮忙看看吧
--------------------stack.h------------------
#include "stdio.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100; //栈存储空间初始分配量
#define STACKINCREMENT 10; //栈存储空间分配增量
//typedef int Status; //Status是函数的类型,其值是函数结果状态代码
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode, *BiTree;
typedef struct {
BiTree *base; //在栈构造之前和销毁之后,base的值为NULL
BiTree *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack;
int InitStack (SqStack *S){
//构造一个空栈
S->base = (BiTree *)malloc(100 * sizeof(BiTree));
if(!S->base) return 0; //存储空间分配失败
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return 1;
}
BiTree GetTop(SqStack *S){
//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
BiTree e;
if(S->top == S->base) return NULL;
e = *(S->top-1);
return e;
}
int Push(SqStack *S, BiTree e){
//插入元素e为新的栈顶元素
if(S->top - S->base >=S->stacksize){ //栈满追加空间
S->base = (BiTree *)realloc(S->base, (S->stacksize + 10) * sizeof(BiTree));
if(!S->base) return 0; //存储空间分配失败
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top++) = e;
return 1;
}
BiTree Pop(SqStack *S){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR;
BiTree e;
if(S->top == S->base) return NULL; //栈空
e = *(--S->top);
return e;
}
int StackEmpty(SqStack *S){
//若栈S为空栈,则返回TRUE,否则返回FALSE
if(S->top == S->base) return TRUE;
else return FALSE;
}
-------------------------BiTree.c--------------------------------
#include "stdio.h"
#include "stack.h"
#include "malloc.h"
#define ERROR 0
#define OK 1
void CreateBiTree(BiTree T){
char ch;
ch=getchar();
if(ch=='#'){
T=NULL;
return;
}
else {
//if(first) first=0;
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T) return 0;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return;
}
int PreOrderTraverse(BiTree T){
//先序遍历二叉树T,打印每个结点的值一次仅一次
BiTree p;
SqStack *S;
InitStack(&S);
//p = T;
while(T||!StackEmpty(S)){
if(p){
printf("%c,",T->data);printf("asdg");
Push(S,p); //根指针进栈
T=T->lchild;
}
else{
T=Pop(&S);
T=T->rchild;
}
}
return 1;
}
int InOrderTraverse(BiTree T){
//中序遍历二叉树T,打印每个结点的值一次仅一次
struct BiTNode *p;
SqStack *S;
InitStack(S);
p = T;
while(p||!StackEmpty(S)){
if(p){
Push(&S,p); //根指针进栈,遍历左子树
p=p->lchild;
}
else{
p=Pop(S);
printf("%c,",p->data);
p=p->rchild;
}
}
return OK;
}
void main (){
BiTree T;
SqStack *S;
printf("请输入二叉树,格式为AB#C##D##\n");
printf("可创建二叉树A(B(#,C),D)\n");
CreateBiTree(T);
printf("先序遍历二叉树的序列为:");
PreOrderTraverse(T); //先序遍历二叉树T
printf("中序遍历二叉树的序列为:");
InOrderTraverse(T); //中序遍历二叉树T
}