二叉树中序非递归遍历方法

#include
#include
#include
typedef struct node
{
int data;
struct node *lch,*rch;
}Node,*tree;
struct stack
{
tree base;
tree top;
int stacksize;
};
void initstack(stack *s)//初始化栈
{
s->base=(tree)malloc(sizeof(Node));
if(!s->base)
exit(1);
s->top=s->base;
s->stacksize=50;
}
void push1(stack *s,tree e)//入栈
{
s->top=e;
s->top++;

}
int pop1(stack *s,tree &e)//出栈
{
if(s->base==s->top)
return 0;
e=--s->top;
return 1;
}
int getTop1(stack *s,tree &e)//是否有元素
{
if(s->top>s->base)
{
e=s->top-1;
return 1;
}
else
return 0;
}
void Create(tree *t)//创立二叉树
{
int data;
scanf("%d",&data);
if(data==0)
*t=NULL;
else
{
*t=(tree)malloc(sizeof(Node));
if(!*t)
return;
(*t)->data=data;
Create(&((*t)->lch));
Create(&((*t)->rch));
}
}
void intraverse(tree t)//中序非递归遍历
{
tree t1;
stack *s;
initstack(s);
while(t||getTop1(s,t1))
{
if(t)
{
push1(s,t);
t=t->lch;
}
else
{
pop1(s,t);
printf("%d ",t->data);
t=t->rch;
}

}

}
int main()
{
tree t;
Create(&t);
printf("\n------------------------\n");
intraverse(t);
printf("\n-------------------------\n");
return 0;
}
看一下哪里有错误?

http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html