二叉树的后序遍历非递归

2019-03-12  本文已影响0人  雨宝_f737

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

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

void BinaryTree::posOrderUnrecur(BinaryNode* head)

{

    stack<BinaryNode*> s1;

    stack<BinaryNode*> 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<<tmp->value<<" ";

    }

    return;

}

上一篇下一篇

猜你喜欢

热点阅读