方法一:
双栈,利用生成先序序列思路,左——右依次入栈再出栈,得到头——右——左的序列,再将该序列入另一栈再出栈,得到左——右——头序列:
void PostOrder_1(Bitree *T)
{
TreeStc *st_1=NULL;
TreeStc *st_2=NULL;
CreatStack(&st_1); //栈1;
CreatStack(&st_2); //栈2;
Bitree *t=T;
PushStack(st_1,*t); //头节点入栈
while(!IsEmpty(st_1))
{
t=(Bitree *)malloc(sizeof(Bitree));
PopStack(st_1,t); //生成头右左序列
PushStack(st_2,*t); //生成左右头序列
if(t->lch!=NULL)
PushStack(st_1,*t->lch);
if(t->rch!=NULL)
PushStack(st_1,*t->rch);
}
for(int i=0;i<LEN;i++)
{
Bitree *p=(Bitree *)malloc(sizeof(Bitree));
PopStack(st_2,p);
printf("%c\t",p->data);
}
free(p);
DestoryStack(st_1);
DestoryStack(st_2);
return;
}
方法二