2 qq 33286911 qq_33286911 于 2016.02.04 16:59 提问

数据结构 二叉树中序非递归遍历

对于二叉树的链接实现,完成非递归的中序遍历过程。

答案如下:

图片说明

(1)求大神给我讲讲这个函数的思路是什么?

(2)最后为什么要top--呢?

7个回答

caozhy
caozhy   Ds   Rxr 2016.02.04 19:34
已采纳

s[++top]=p,把当前节点放入堆栈
bt=p->lchild貌似写错了,是p=p->lchild,继续找左子节点
如果左子没有左子了,那么就输出当前和右子,然后退栈

top--和top++对应,是为了出栈

IT_DS
IT_DS   2016.02.05 19:46

s[++top]=p,把当前节点放入堆栈
bt=p->lchild貌似写错了,是p=p->lchild,继续找左子节点
如果左子没有左子了,那么就输出当前和右子,然后退栈

top--和top++对应,是为了出栈

IT_DS
IT_DS   2016.02.05 19:46

s[++top]=p,把当前节点放入堆栈
bt=p->lchild貌似写错了,是p=p->lchild,继续找左子节点
如果左子没有左子了,那么就输出当前和右子,然后退栈

top--和top++对应,是为了出栈

IT_DS
IT_DS   2016.02.05 19:46

s[++top]=p,把当前节点放入堆栈
bt=p->lchild貌似写错了,是p=p->lchild,继续找左子节点
如果左子没有左子了,那么就输出当前和右子,然后退栈

top--和top++对应,是为了出栈

IT_DS
IT_DS   2016.02.05 19:46

s[++top]=p,把当前节点放入堆栈
bt=p->lchild貌似写错了,是p=p->lchild,继续找左子节点
如果左子没有左子了,那么就输出当前和右子,然后退栈

top--和top++对应,是为了出栈

IT_DS
IT_DS   2016.02.05 19:46

s[++top]=p,把当前节点放入堆栈
bt=p->lchild貌似写错了,是p=p->lchild,继续找左子节点
如果左子没有左子了,那么就输出当前和右子,然后退栈

top--和top++对应,是为了出栈

IT_DS
IT_DS   2016.02.05 19:46

s[++top]=p,把当前节点放入堆栈
bt=p->lchild貌似写错了,是p=p->lchild,继续找左子节点
如果左子没有左子了,那么就输出当前和右子,然后退栈

top--和top++对应,是为了出栈

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
[数据结构]对中序非递归遍历二叉树的理解与讨论
中序遍历二叉树,即是先遍历左子树,再访问根节点,最后遍历右子树,这个顺序对于每棵子树都是一样的,是访问子树的共性,故可依次顺序设置循环,逐一访问每个结点。对于每一个树的子树,均要完成此操作。故在开始遍历之时,应先找到最左边的结点,遍历应从此开始。访问完此结点,应逐一访问此结点的根结点和右子树。有点难度的第一是找最左节点。方法是从树的根结点顺lchild而下直到NULL为止。二是访问完根节点后以中序
数据结构——二叉树的递归与非递归遍历(先序,中序,后序)
实验项目五 二叉树基本操作的实现 课程名称:数据结构 实验项目名称:二叉树基本操作的实现 实验目的: 1.掌握树的基本操作—遍历。 实验要求: 1、 分别用递归和非递归的方法实现一棵树的三种遍历。 实验过程: 1、 创建一棵二叉树(二叉树如下图所示); 2、 用递归算法实现对该树的三种遍历; 3、 用非递归算法实现对该树的三种遍历; 4、 输入选项
【数据结构】二叉树的前中后序遍历递归和非递归实现
二叉树有很多操作,而二叉树的遍历只是其中的一个基本操作。 二叉树的遍历方式有3种:前序遍历,中序遍历,后序遍历。前中后遍历顺序是根据什么时候遍历根节点来说的。
【算法导论】二叉树的前中后序非递归遍历实现
二叉树的非递归遍历
二叉树的中序非递归遍历c语言版
由于c语言没有c++的STL库,我们无法借助c++的stack库实现二叉树的非递归遍历,但是,我们完全可以自己打造一个c语言版的stack库。本篇博文就是借助我们之前在栈的链式 存储这篇博文实现的程序。当然,你也可以把它编译成动态库dll(可以参考)放到自己的工程项目中。 #define _CRT_SECURE_NO_WARNINGS #include #include #inclu
二叉树先序后序递归建立,前中后序层次非递归遍历,以及统计叶子结点个数以及树的深度
下面的代码实现了二叉树的先序或者后序递归建立,然后实现了二叉树的非递归的先序中序后序遍历,还有层次遍历,以及统计树的叶子结点个数和树的深度。其中非递归的先中后序遍历用到了链栈,层次遍历用到了队列。 编程平台为Visual Studio 2012,语言为C,但不是纯C,比如用到了C++的引用机制以及变量的随时定义(在纯C中,变量必须在函数一开始的地方全部声明)。 // 二叉树非递归遍历.cp
二叉树的非递归遍历以及层次遍历(前序、中序、后序)
先使用先序的方法建立一棵二叉树,然后分别使用递归与非递归的方法实现前序、中序、后序遍历二叉树,并使用了两种方法来进行层次遍历二叉树,一种方法就是使用STL中的queue,另外一种方法就是定义了一个数组队列,分别使用了front和rear两个数组的下标来表示入队与出队,还有两个操作就是求二叉树的深度、结点数。。。
数据结构c语言版建立二叉树,中序非递归遍历(实验报告)
编写程序,用先序递归的方法建立二叉树,建立二叉树后,用中序非递归方法遍历该二叉树,并输出遍历序列。
二叉树的前序、中序、后序、层次遍历的递归与非递归实现
二叉树的遍历有前序遍历、中序遍历、后序遍历、层次遍历等,笔者在这里总结一下各种遍历的实现。 一.前序遍历。 前序遍历访问节点顺序为:根节点->左子节点->右子节点。 递归实现如下: void preorder(TreeNode* root, vector& nodes) { if (!root) return; nodes.push_back(root -> val);
【数据结构与算法】二叉树递归与非递归遍历(附完整源码)
二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(递归也是用栈实现的)。下面先简要介绍三种遍历方式的递归实现,再详细介绍三种遍历方式的非递归实现。 一、三种遍历方式