美文网首页
非递归先序遍历二叉树

非递归先序遍历二叉树

作者: doyoubi | 来源:发表于2015-03-11 15:23 被阅读94次

教科书上的非递归先序遍历二叉树的代码比较难想。之前考试考到的时候曾经想用finite automaton来实现,学编译原理的时候发现,finite automaton似乎是不能解决这个问题的,而需要使用pushdown automaton。看来应当去学学automaton theory。

我自己想的算法需要用三样东西

(1)存结点的栈

(2)存遍历方向的栈

(3)标记是否第一次进入结点的变量。

算法如下:

(1)ns(2)ds(3)firstEnter

firstEnter = true;    ns.push(root);

while( not ns.empty() ) {

    if( firstEnter and ns.top != null)   

            print(ns.top);    ns.push(ns.top.left);    ds.push(LEFT);    firstEnter = True;

    if( firstEnter and ns.top == null)

            ns.pop();    firstEnter = False;

    if( not firstEnter and ds.top() == LEFT )

            ds.pop();    ns.push(ns.top().right);    ds.push(RIGHT);    firstEnter = True;

    if( not firstEnter and ds.top() == RIGHT)

           ds.pop();    ns.pop();    firstEnter = False;

}

相关文章

  • 算法之二叉树

    二叉树之C++实现 创建二叉树 复制二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍...

  • python遍历二叉树

    定义二叉树: 构建二叉树: BFS: 先序遍历:1.递归版本: 2.非递归版本: 中序遍历: 1.递归版本 2.非...

  • 二叉树遍历

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

  • 二叉树先序、中序、后序遍历 递归与非递归 Python实现 1.先序遍历:根节点->左子树->右子树 2.中序遍历...

  • 二叉树的操作

    /*主要内容:1、实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式*/ 实现二叉树的先序、中序、后序遍历...

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

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

  • 树的遍历

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

  • Java二叉树的遍历

    Java二叉树的遍历 利用递归和非递归实现二叉树的先序,中序,后序遍历以及使用队列实现二叉树的层次遍历

  • 树的遍历,golang实现

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

  • 二叉树遍历(先序、中序、后序)

    二叉树有多种遍历方法,有层次遍历、深度优先遍历、广度优先遍历等。 本文只涉及二叉树的先序、中序、后序的递归和非递归...

网友评论

      本文标题:非递归先序遍历二叉树

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