二叉树
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直到栈为空,弹出节点的顺序即为前序遍历的顺序
下图即为出栈入栈整个过程: