美文网首页算法数据结构和算法分析
【练习】实现二叉树的前序 / 中序 / 后序非递归遍历

【练习】实现二叉树的前序 / 中序 / 后序非递归遍历

作者: pangdaaa | 来源:发表于2017-07-27 12:59 被阅读24次
//实现二叉树的前序 / 中序 / 后序非递归遍历
#include <iostream>
#include <stack>
using namespace std;

struct BinaryTreeNode
{
    BinaryTreeNode* _left;
    BinaryTreeNode* _right;
    int _data;

    BinaryTreeNode(const int& x)
        : _data(x)
        , _left(NULL)
        , _right(NULL)
    {}
};

void PrevOderNoR(BinaryTreeNode* root)
{
    stack<BinaryTreeNode*> s;

    BinaryTreeNode* cur = root;

    while (cur || !s.empty())
    {
        while (cur)
        {
            cout << cur->_data << " ";
            s.push(cur);
            cur = cur->_left;
        }
        
        BinaryTreeNode* top = s.top();
        s.pop();
        cur = top->_right;
    }
    cout << endl;
}

void InOderNoR(BinaryTreeNode* root)
{
    stack<BinaryTreeNode*> s;

    BinaryTreeNode* cur = root;

    while (cur || !s.empty())
    {
        while (cur)
        {
            s.push(cur);
            cur = cur->_left;
        }

        BinaryTreeNode* top = s.top();
        s.pop();
        cout << top->_data << " ";
        cur = top->_right;
    }
    cout << endl;
}

void PostOderNoR(BinaryTreeNode* root)
{
    stack<BinaryTreeNode*> s;

    BinaryTreeNode* cur = root;
    BinaryTreeNode* visit = NULL;

    while (cur || !s.empty())
    {
        while (cur)
        {
            s.push(cur);
            cur = cur->_left;
        }

        BinaryTreeNode* top = s.top();
        s.pop();
        if (top->_right == NULL || top->_right == visit)//如果右为空或者右被访问了才访问当前节点
        {
            cout << top->_data << " ";
            visit = top;
        }
        else if (top->_left == visit) // 如果左刚被访问过,当前根节点再次入栈
        {
            s.push(top);
            cur = top->_right;
        }

    }
    cout << endl;
}

相关文章

  • goLang 二叉树遍历(递归 非递归 前序遍历 中序遍历 后序

    goLang 二叉树遍历(递归 非递归 前序遍历 中序遍历 后序遍历 层序遍历) 前序遍历 中序遍历 后序遍历 代...

  • 各种二叉树遍历

    C++实现,二叉树的递归、非递归版本的前序、中序、后序遍历。

  • 二叉树遍历-JAVA实现

    基础二叉树 二叉树遍历分为前序、中序、后序递归和非递归遍历、还有层序遍历。 前序递归遍历算法:访问根结点-->递归...

  • 左神算法笔记——Morris遍历

    基本问题——实现二叉树的前序、中序、后序遍历 (递归、非递归,mirros方法) 递归 递归方式下的前中后遍历 非...

  • 二叉树前、中、后序遍历、层次遍历

    1、前序遍历 非递归:利用Stack实现 递归 2、中序遍历 非递归:利用Stack实现 递归: 3、后序遍历 非...

  • 二叉树的各类遍历方法

    二叉树的遍历主要有四种:前序、中序、后序、层序。 遍历的实现方式主要是:递归和非递归。递归遍历的实现非常容易,非递...

  • 二叉树,非递归法

    递归法 二叉树的递归,有前序遍历、中序遍历、后序遍历,一般采用递归法,比较简单 非递归法 二叉树非递归法,采用栈来实现

  • 二叉树的前中后序遍历-递归&非递归实现

    二叉树的遍历口诀 前序:根左右 中序:左根右 后序:左右根 递归解法: 前序遍历: 中序遍历: 后序遍历: 递归解...

  • 二叉树的遍历

    非递归前序遍历 非递归中序遍历 非递归后序遍历 层序遍历

  • 二叉树

    来源 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现 二叉树的实现及先序、...

网友评论

    本文标题:【练习】实现二叉树的前序 / 中序 / 后序非递归遍历

    本文链接:https://www.haomeiwen.com/subject/afjzkxtx.html