非递归实现二叉树的前序、中序、后序遍历
2015-05-08 14:40
351 查看
二叉树
1 非递归前序遍历二叉树
1.1 递归前序遍历二叉树
按照教科书上的做法,前序遍历过程如下:先访问根节点,再访问左节点,再访问右节点另一种访问方式为:按照图中红线的轨迹,第一次遇到的节点即为前序遍历的过程
按照以上两种方法中的任意一种遍历都可以得到如下结果,前序遍历结果
A->B->D->G->H->C->E->I->F
1.2 非递归实现前序遍历
用栈可以实现二叉树的非递归前序遍历。栈是一种先进先出的数据结构,示意图如下:用栈实现的二叉树前序遍历的过程如下:
1)将根节点加入栈
2)从栈中弹出一个节点,将该节点的右节点和左节点分别压入栈内
3)重复步骤2直到栈为空,弹出节点的顺序即为前序遍历的顺序
下图即为出栈入栈整个过程:
2 非递归中序遍历二叉树
2.1 递归中序遍历二叉树
按照教科书上的做法,中序遍历过程如下:先访问左子树,再访问根节点,再访问右节点另一种访问方式为:按照图中红线的轨迹,第二次遇到的节点即为前序遍历的过程
按照以上两种方法中的任意一种遍历都可以得到如下结果,前序遍历结果
G->D->H->B->A->I->E->C->F
2.2 非递归实现前序遍历
依然用栈可以实现二叉树的非递归中序遍历。用栈实现的二叉树前序遍历的过程如下:- 1)将树种所有的左子树全部压入栈内
- 2)从栈中弹出一个节点,如果该节点有右节点,则将以右节点为根节点的子树种所有的左节点压入栈内,如果有的节点没有左子树,只有右子树,则继续将节点的右子树中国的左节点加入到栈中
- 3)重复步骤2直到栈为空,弹出节点的顺序即为前序遍历的顺序
下图即为出栈入栈整个过程:
相关文章推荐
- 二叉树先序,中序,后序遍历非递归实现
- 用递归和非递归方式实现二叉树先序、中序和后序遍历
- 二叉树前序、中序、后序遍历的递归与非递归算法实现
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- 数据结构(一)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- Java实现二叉树的前序、中序、后序遍历(递归方法)
- 二叉树的先序、中序、后序遍历的非递归实现
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 二叉树的遍历 前序 中序 后序 分别实现递归和非递归遍历方式
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- 用非递归实现二叉树的前序、中序、后序、层次遍历,用递归实现查找、统计个数、比较、求深度
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树先序、中序,后序遍历的非递归实现
- Java实现二叉树的前序、中序、后序遍历(非递归方法)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现(转)
- 数据结构 — 实现二叉树的前序,中序,后序遍历(非递归)
- PHP实现非递归先序、中序、后序遍历二叉树