二叉树的后序遍历非递归

使用两个栈,遇到根节点放入s2中,压到最底下,后面弹出来就是最后访问的;

新来的结点放入s1,先放左后放右,先弹出右压进去,后左。

void BinaryTree::posOrderUnrecur(BinaryNode* head)

{

    stack s1;

    stack s2;

    s1.push(head);

    BinaryNode* tmp;

    while(!s1.empty())

    {

        tmp = s1.top();

        s1.pop();

        s2.push(tmp);

        if(tmp->left!=NULL)

        {

            s1.push(tmp->left);

        }

        if(tmp->right!=NULL)

        {

            s1.push(tmp->right);

        }

    }

    while(!s2.empty())

    {

        tmp = s2.top();

        s2.pop();

        cout<value<<" ";

    }

    return;

}

你可能感兴趣的:(二叉树的后序遍历非递归)