美文网首页数据结构
数据结构题目40:二叉树的中序遍历(非递归)

数据结构题目40:二叉树的中序遍历(非递归)

作者: 玲儿珑 | 来源:发表于2020-05-11 18:00 被阅读0次

题目:若二叉树为二叉链表存储结构,写出二叉树的中序遍历的非递归算法。

解题思路:设置一个假设空间足够、且采用顺序存储结构的堆栈STACK[0..M-1]来保存遍历过程中连接点的地址,并设栈顶指针为top,初始时top的值为-1;同时,算法中还设置了一个活动指针变量p,用来指向当前要访问的那个结点,初始时它指向二叉树的根结点。
核心思想为:当p所指的结点不为空时,即将该结点所在链结点的地址进栈,然后再将p指向该结点的左孩子结点;当p所指的结点为空时,则丛堆栈中退出栈顶元素送p,并访问该结点,然后再将p指向该结点的右孩子结点。重复上述过程,直到p为null,并且堆栈也为空,遍历结束。

具体算法如下:
这里使用到建立二叉树方法createBT(strBT)

function inOrder1(BT) {
    let stack=new Array(MaxSize), p=BT, top=-1
    do {
        while ( p!=null ) {
            stack[++top] = p
            p = p.lchild
        }
        p = stack[top--]
        console.log(p.data)
        p = p.rchild
    } while (!(p==null&&top==-1));
}

var strBT="A(B(D,E(G)),C(F(,H)))@"
var BT = createBT(strBT)
inOrder1(BT)

性能:
时间和空间复杂度都为O(n)

相关文章

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

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

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

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

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

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

  • 二叉树遍历-JAVA实现

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

  • 二叉树遍历

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

  • 二叉树的四种遍历方法

    二叉树的数据结构 1、前序遍历(递归) 2、中序遍历(递归) 3、后序遍历(递归) 4、层次遍历(队列)

  • 算法之二叉树

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

  • 二叉树遍历

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

  • 大数据面试题目

    一、数据结构与算法 1.二叉树前序、中序、后续遍历方式(递归以及非递归) 2.二叉树的深度以及广度遍历方式 ...

  • 总结

    1、二叉树广度遍历(非递归) 广度遍历非递归实现需要依靠一个队列。 2、二叉树深度遍历(递归与非递归,前序,中序和...

网友评论

    本文标题:数据结构题目40:二叉树的中序遍历(非递归)

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