求”“”非递归“”“”后序遍历二叉链表算法解决办法

求”“”非递归“”“”后序遍历二叉链表算法
老师给的思路:
1.栈的初始化;
 2:循环到root为空且STACK为空;
     2.1: 将root连同flag=1压栈;
           遍历root左子树;
      2.2:当栈s非空且栈顶为标志2时候,出栈并输出栈顶节点;
      2.3:栈非空将栈顶标志改为2,准备遍历栈顶节点的右子数;

我按照这个写的code:
void npost_order(BTtree *T)//非递归后根遍历二叉树
{
    struct STACK
    {
        BTtree*  tree;
        int  flag;
    } S[maxlen];
    int top=maxlen;
    while(T!=NULL||top!=maxlen)
    {
        while(T!=NULL)
        {
            top--;
            S[top].tree=T;
            S[top].flag=1;
            T=T->lchild;
        }
        if(top!=maxlen)
        {
            if(S[top].flag==2)
            {
                T=S[top++].tree;
                cout << T->data;
            }
            else
            {
                S[top].flag=2;
                T=S[top].tree->rchild;
            }
        }
    }
}

大神们看看我哪儿错啦!maxlen 前面用宏定义过的;
高人指点一下,这是我们数据结构实验的一小部分,今天卡啦,跪求!!!

------解决方案--------------------
你的进栈出栈会出现死循环的,你把一个出栈后的元素又重新把它进栈了,你再改改,要出去就不帮你写了,自己动手进步快啊