/*非递归用栈*/
#include<iostream>
using namespace std;
#define max 100
typedef struct bitnode{
char data;
bitnode *lchild,*rchild;
}bitnode,*bitree;
class stack{
bitree *base;
bitree *top;
int stacksize;
public:
stack(){top=base=new bitree[max];stacksize=max;}
void push(bitnode *e){*top++=e;}
void pop(bitnode *&e){e=*--top;}
int emptystack(){if(top==base)return 1;
else return 0;
}
};
class bitt{
bitnode *pt;
void create(bitnode *&t);
public:
void createbitree();
void inorder();
};
void bitt:: create(bitnode *&t){
char ch;
cin>>ch;
if(ch=='.')t=NULL;
else{
t=new bitnode;
t->data=ch;
create(t->lchild);
create(t->rchild);
}
}
void bitt::createbitree(){
bitnode *t;
create(t);
pt=t;
}
void bitt::inorder(){
stack s;//栈S初始化;
bitnode *p=pt;
while(p!=NULL || !s.emptystack()){
if(p!=NULL) {s.push(p);
p=p->lchild;
}
else { s.pop(p);
cout<<p->data;
p=p->rchild;
}
}//while
}
int main(){
bitt tt;
tt.createbitree();
tt.inorder();
return 0;
}