帮忙看一下吧!二叉树
#include<iostream>
using namespace std;
typedef char Elemtype;
typedef bool status;
typedef struct CTNode{
Elemtype data;
struct CTNode *lchild,*rchild;
}CSNode,*CSTree,*BiTree,*SElemType;
#define max 20
#define mm 10
#define OK 1
#define error 0
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
status InitStack(SqStack &S){
S.base=(SElemType *)malloc(max*sizeof(SElemType));
if(!S.base) return error;
S.top=S.base;
S.stacksize=max;
return OK;
}
status GetTop(SqStack S,SElemType &e){
if(S.top==S.base) return error;
e=*(--S.top);
return OK;
}
status Push(SqStack &S,SElemType e){
if(S.top-S.base>=S.stacksize){
S.base=(SElemType *)realloc(S.base,(max+mm)*sizeof(SElemType));
if(!S.base) return error;
S.top=S.base+S.stacksize;
S.stacksize+=mm;
}
*S.top++=e;
return OK;
}
status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base) return error;
e=*--S.top;
return OK;
}
status StackEmpty(SqStack &S){
if(S.top==S.base) return 1;
else return 0;
}
class Tree{
private:
CSTree T;
public:
Tree(){
T=NULL;
};
status CreateBiTree();
status InOrderTraverse ();
};
status Tree::CreateBiTree()
{
CSTree p;
Elemtype ch;
SqStack S;
ch=getchar();
InitStack(S);
while(ch!=' '||!StackEmpty(S)){
if(ch!=' '){
p=(CSTree)malloc(sizeof(CSNode));
if(T==NULL) T=p;
if(!p)
return error;
p->data=ch;
Push(S,p);
p=p->lchild;
ch=getchar();
}
else{
p=NULL;
Pop(S,p);
p=p->rchild;
ch=getchar();
}
}
return OK;
}
status Tree::InOrderTraverse()
{
SqStack S;
InitStack(S);
BiTree p=T;
while(p||!StackEmpty(S)){
if(p){
Push(S,p);p=p->lchild;}
else{
Pop(S,p);
cout<<p->data<<endl;
p=p->rchild;
}
}
return OK;
}
int main()
{
Tree T;
T.CreateBiTree();
T.InOrderTraverse();
return 0;
}