遍历的概念
顺着某一条搜索路径巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。
“访问”的含义可以很广,如:输出结点的信息等。
“遍历”是任何类型均有的操作,对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。而二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径进行遍历的问题。
搜索路径
对于“二叉树”而言,可以有3条搜索路径:
- 先上后下的按层次遍历;
- 先左(子树)后右(子树)的遍历;
- 先右(子树)后左(子树)的遍历。
遍历算法(非递归)
先序遍历
若二叉树为空树,则空操作;否则,
- 访问根结点;
- 先序遍历左子树;
- 先序遍历右子树。
中序遍历
若二叉树为空树,则空操作;否则,
- 中序遍历左子树;
- 访问根节点;
- 中序遍历右子树。
后序遍历
若二叉树为空树,则空操作;否则,
- 后序遍历左子树;
- 后序遍历右子树。
- 访问根节点;