美文网首页
树的非递归遍历——中序

树的非递归遍历——中序

作者: eesly_yuan | 来源:发表于2014-10-08 16:22 被阅读278次

中序遍历比前序相对复杂一些,分析如下
1、对于任意一个节点p,左节点不为空则其入栈,一直循环到左节点为空
2、输出栈顶,pop栈顶
2、p更新为栈顶节点的右节点

//中序遍历
void midorder(Node *root)
{
    if (root == NULL)
        return;
    midorder(root->left);
    cout<<root->val<<" ";
    midorder(root->right);
}

//非递归实现
/*对于任一结点P,
1)若其左孩子不为空,则将P入栈并将P的左孩子置为当前的P,然后对当前结点P再进行相同的处理;
2)若其左孩子为空,则取栈顶元素并进行出栈操作,访问该栈顶结点,然后将当前的P置为栈顶结点的右孩子;
3)直到P为NULL并且栈为空则遍历结束*/
void midorderloop(Node *root)
{
    if (root == NULL)
        return;
    stack<Node *> sn;
    Node *p = root;
    while(p!=NULL||sn.size())
    {
        while(p!=NULL)
        {
            sn.push(p);
            p = p->left;
        }
        if (sn.size())
        {
            p = sn.top();
            sn.pop();
            cout<<p->val<<" ";
            p = p->right;
        }
    }
}

相关文章

  • 树的遍历算法

    树的递归遍历 树的层次遍历 树的非递归前序遍历 树的非递归中序遍历

  • 二叉树遍历

    先序遍历——[递归、非递归] 中序遍历——[递归、非递归] 后序遍历——[递归、非递归] 层次遍历——[递归、非递归]

  • 二叉树递归非递归遍历算法整理

    一、二叉树前序遍历 1 前序递归遍历 2.前序非递归遍历 一、二叉树中序遍历 2.中序递归遍历 1.中序非递归遍历...

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

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

  • 树的遍历

    节点结构: 先序遍历 递归 非递归 后序遍历 递归 非递归 中序遍历 递归 非递归 层序遍历 类库 有了上述遍历算...

  • LeetCode 二叉树的中序遍历(递归和非递归算法)

    二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例: 非递归(思路更清晰): 非递归: 递归:

  • 二叉树遍历-JAVA实现

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

  • 二叉树遍历

    二叉树的遍历 1. 前序遍历 1.1 递归前序遍历 1.2 非递归前序遍历 2 中序遍历 2.1递归遍历 2.2非...

  • 二叉树遍历

    请递归,非递归方式分别前序遍历,中序遍历,后续遍历二叉树

  • 树的遍历,golang实现

    先序,递归 中序,递归 后序,递归 先序,非递归 中序,非递归 后序,非递归 层序遍历

网友评论

      本文标题:树的非递归遍历——中序

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