/* Note:Your choice is C IDE */
#include "stdio.h"
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define ERROR 0
#define OK 1
#define OVERFLOW -2
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct {
int *base;
int *top;
int stacksize;
} SqStack;
int InitStack (SqStack *S)
{
S->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if (!S->base)
exit (OVERFLOW);
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
int StackEmpty(*S){ //此处好象编译出错!!!
if(S->top==S->base)
return OK;
else return ERROR;
}
int 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 (OVERFLOW);
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*S->top++ = e;
return OK;
}
int Pop (SqStack *S, int *e)
{
if (S->top == S->base) return ERROR;
*e = *--S->top;
return OK;
}
BiTree CreateBiTree(BiTree T) {
int ch;
scanf("%d",&ch);
if (ch==0) T = NULL;
else {
if (!(T = (BiTree)malloc(sizeof(BiTNode)))) return ERROR;
T->lchild=CreateBiTree(T->lchild);
T->data = ch;
T->rchild=CreateBiTree(T->rchild);
}
return T;
}
int InOrderTraverse(BiTree T) {
stack S;
BiTree p;
InitStack(&S); p = T;
while (p || !StackEmpty(&S)) {
if (p) {
Push(&S, p);
p = p->lchild;
}
else {
Pop(&S, &p);
if (p->data!=0) return ERROR;
p = p->rchild;
}
}
return OK;
}
main()
{
BiTree T;
printf("chuang jian zhong xu er cha shu:\n");
T=CreateBiTree(T);
printf("bian li er cha shu :\n");
InOrderTraverse(T);
}
这个中序遍历算法 我不知道错在什么地方,请大家帮我修改以下!!!
ch=0 表示树的叶子结点的左孩子为空
开心每一天1111
噜噜哒
守着一只汪