[数据结构]对三序非递归遍历二叉树的理解
2004-08-11 19:22
267 查看
前几天看听了一个递归到非递归变换的讲座,有些心得不敢独享。故拿出来同大家一起讨论。
三种序列遍历二叉树都要用到栈,栈起的作用是保存树顶的结点以便返回时出栈调用。
先序:按先序的顺序,访问完根要遍历其左子树。若其左子树的度不为零,则要先遍历完左子树才能去遍历根的右子树,而且在树下的要比树上的优先遍历。由此特性,可以用到栈的后入先出特点,把根结点逐一入栈,带左子树访问完时再出栈获得根的地址,再遍历右子树。
由此进一步讨论,递归转非递归将经历保存当前函数的变量并将其入栈、调用被调用函数、控制权交给被调用函数,而返回状态时将经历保存被调用函数的变量和返回值即出栈、控制权转交给调用函数、返回值返回给调用函数。由此可见,再将递归函数转化成非递归函数时,入栈的是调用函数的变量,而当返回时要将被调用函数的变量出栈并将出栈之中的返回值返回给主调函数。
三种序列遍历二叉树都要用到栈,栈起的作用是保存树顶的结点以便返回时出栈调用。
先序:按先序的顺序,访问完根要遍历其左子树。若其左子树的度不为零,则要先遍历完左子树才能去遍历根的右子树,而且在树下的要比树上的优先遍历。由此特性,可以用到栈的后入先出特点,把根结点逐一入栈,带左子树访问完时再出栈获得根的地址,再遍历右子树。
由此进一步讨论,递归转非递归将经历保存当前函数的变量并将其入栈、调用被调用函数、控制权交给被调用函数,而返回状态时将经历保存被调用函数的变量和返回值即出栈、控制权转交给调用函数、返回值返回给调用函数。由此可见,再将递归函数转化成非递归函数时,入栈的是调用函数的变量,而当返回时要将被调用函数的变量出栈并将出栈之中的返回值返回给主调函数。
相关文章推荐
- [数据结构]对中序非递归遍历二叉树的理解与讨论
- 二叉树的遍历与青蛙跳台阶——利用递归的数据结构来理解递归过程
- 数据结构_二叉树_遍历算法应用
- 数据结构--二叉树 的先序,中序,后序遍历
- 数据结构--二叉树代码实现(建立,前序,中序,后续遍历,树的深度,销毁)
- 遍历二叉树的简单理解
- 数据结构--二叉树--节点的修改(顺序结构,包括二叉树的顺序遍历和打印)
- *第十一周*数据结构实践项目一【二叉树的层次遍历算法】
- 数据结构--二叉树--中序非递归遍历二叉树(链式结构)2
- 数据结构----二叉树----建立与遍历
- 二叉树是笔试面试中考试最频繁的数据结构之一,主要包括,程序建立一个二叉树,三种次序遍历二叉树,返回叶子节点的数目,求二叉树节点的总数等。建立一个二叉树节点的数据结构
- 二叉树的遍历(数据结构)
- 数据结构学习——非递归方法遍历二叉树
- 数据结构:二叉树前序、中序和后序遍历的非递归表示
- 数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历
- 【算法与数据结构】二叉树的 先序 遍历
- 数据结构_二叉树的先序建立与先序,中序,后序(递归)遍历方式_C语言源代码
- 数据结构--非递归遍历二叉树(利用辅助栈)
- 【数据结构】二叉树的前中后序遍历递归和非递归实现
- 数据结构:二叉树(前,中,后,层次)非递归遍历。