求助:二叉树非递归遍历。出错,不知咋改
#include<iostream.h>#define max 20
typedef struct lnode{
char data;
lnode *lchild,*rchild;
}lnode,*tree;
typedef struct{
lnode *base;
lnode *top;
int stacksize;
}stack;
void initstack(stack &s){
s.base=s.top=new tree[max];
s.stacksize=max;
}
int emptystack(stack &s){
if(s.top==s.base) return 1;
else return 0;
}
void push(stack &s,tree e){
*s.top=e;
s.top++;
}
void pop(stack &s,tree e){
if(s.top==s.base) return;
e=*--s.top;
}
void create(lnode &t){
char ch;
cout<<"请输入一个字母:";
cin>>ch;
if(ch=='.') t=NULL;
else{
t=new lnode;
t->data=ch;
create(t->lchild);
create(t->rchild);
}
}
void preorder(lnode &t){
stack s;
initstack(s);
lnode *p=t;
while(p||!emptystack(s)){
if(p){
cout<<p->data;
push(s,p);
p=p->lchild;
}
else{
pop(s,p);
p=p->rchild;
}
}
}
void main(void){
lnode *t;
create(t);
preorder(t);
}