#include<stdio.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
typedef struct bitnode{
char data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
typedef struct {
bitree *base;
bitree *top;
int stacksize ;
}sqstack;
#define initsize 10
#define increment 10
int push(sqstack &s,bitree &e)
{
if(s.top-s.base>=s.stacksize){
s.base=(bitree*)realloc(s.base,(s.stacksize+increment)*sizeof(bitree));
if(!s.base)return 0;
s.top=s.base+s.stacksize;
s.stacksize+=increment;
}
*(s.top)++=e;
return 1;
}
int pop(sqstack &s,bitree e)
{
if(s.top==s.base)return 0;
e=*--s.top;
return 1;
}
int stackempty(sqstack s)
{
if(s.top==s.base)return 1;
else return 0;
}
int initstack(sqstack &s)
{
s.base=(bitree*)malloc(initsize*sizeof(bitree));
if(!s.base)return 0;
s.top=s.base;
s.stacksize=initsize;
return 1;
}
int printelement(char e)
{
if(e!='#') {
printf("%c",e);
return 1;}
else return 0;
}
int createbitree(bitree &T)
{ char ch;
scanf("%c",&ch);
if(ch=='#')T=NULL;
else{
if(!(T=(bitnode*)malloc(sizeof(bitnode))))return 0;
T->data=ch;
createbitree(T->lchild);
createbitree(T->rchild);
}
return 1;
}
int inordertraverse2(bitree t,int(*visit)(char e))
{sqstack s;
initstack(s);bitree p;
p=t;
while(p||!stackempty(s)){
if(p){push(s,p);p=p->lchild;
}
else{
pop(s,p);if(!visit(p->data)) return 0;p=p->rchild;
}
}
return 1;
}
int main()
{inordertraverse2(t,printelement);
return 0;
}