您的位置:首页 > 其它

非递归实现二叉树的前序、中序、后序遍历

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直到栈为空,弹出节点的顺序即为前序遍历的顺序

下图即为出栈入栈整个过程:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐