#SIZE 100
typedef struct{
int data;
BNode *lchild,*rchild;
}BNode,*BiTree;
typedef struct{
int top,rear;
BiTree Tree[SIZE];
}Stack;
int zhongxu_tree(BiTree &T,Stack &S){
BiTree p=T;
if(!p)return 1;
S.rear=S.top=0;
Push(p,S);
while(1){
if(p->lchild){
p=p->lchild;
Push(p,S);
}
else{
p=Pop(S);
if(S.top==-1)
break;
visit(p);
while(!p->rchild)
{
p=Pop(S);
if(S.top==-1)
break 2;
visit(p);
}
Push(p->rchild,S);
p=p->rchild;
}
}
}
void Push(BiTree &p,Stack &S){
if(S.top>=SIZE)
exit(1);
S.Tree[top]=p;
S.top++;
}
BiTree Pop(Stack &S){
S.top--;
if(S.top==-1)
return NULL;
else
return S.Tree[S.top];
}
typedef struct{
int data;
BNode *lchild,*rchild;
}BNode,*BiTree;
typedef struct{
int top,rear;
BiTree Tree[SIZE];
}Stack;
int zhongxu_tree(BiTree &T,Stack &S){
BiTree p=T;
if(!p)return 1;
S.rear=S.top=0;
Push(p,S);
while(1){
if(p->lchild){
p=p->lchild;
Push(p,S);
}
else{
p=Pop(S);
if(S.top==-1)
break;
visit(p);
while(!p->rchild)
{
p=Pop(S);
if(S.top==-1)
break 2;
visit(p);
}
Push(p->rchild,S);
p=p->rchild;
}
}
}
void Push(BiTree &p,Stack &S){
if(S.top>=SIZE)
exit(1);
S.Tree[top]=p;
S.top++;
}
BiTree Pop(Stack &S){
S.top--;
if(S.top==-1)
return NULL;
else
return S.Tree[S.top];
}