高分求救二叉树中序遍历问题
熊云昆 2004-11-20 09:51:41 小弟今天写了个程序,在电脑上运行却怎么也实现不了,大家帮忙看看。
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*Bitree;
typedef struct{
Bitree *base;
Bitree *top;
int stacksize;
}SqStack;
status InitStack(SqStack &S){
//构造一个空栈
S.base=(Bitree*)malloc(STACK_INIT_SIZE*sizeof(BiTNode));
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,Bitree e){
//插入元素e为新的栈顶元素
if(S.top-S.base>=S.stacksize){//栈满,追加存储空间
S.base=(Bitree*)realloc(S.base,(S.stacksize+STACKCREMENT)*sizeof(BiTNode));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKCREMENT;
}
*S.top++=e;
return OK;
}
status pop(SqStack &S,Bitree &e){
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
if(S.top==S.base)return ERROR;
e=--*S.top;
return OK;
}
status CreateBitree(Bitree &T){
//创建二叉树
LinkQueue Q;
Bitree p,q,r;
int a[STACK_INIT_SIZE];
int i=1,t=1;
cout<<"请输入二叉树的元素并以100结束\n";
while(t<STACK_INIT_SIZE&&a[t-1]!=100)
{cin>>a[t]; t++;}
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);
T->data=a[1];p=T;
InitQueue(Q);
while(i<t){
Dequeue(Q,p);
if((2*i+1)<=t){if(a[2*i]!=0)
{if(!(q=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);
q->data=a[2*i];p->lchild=q;
EnQueue(Q,q);}
else p->lchild=NULL;
if(a[2*i+1]!=0){
if(!(r=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);
r->data=a[2*i+1]; p->rchild=r;
EnQueue(Q,r);}
else p->rchild=NULL;}
else{p->lchild=NULL;p->rchild=NULL;}
i++;}
return OK;
}
status visit(TElemType e){
cout<<e;
return OK;
}
status InorderTraverse(Bitree T){
//中序遍历二叉树
int 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);
e=p->data;
visit(e);
p=p->rchild;
}
}
return OK;
}