7.4 树和森林的遍历

7.4.1 树的遍历

树的遍历通常有以下两种方式。

1.先根遍历

先根遍历的定义为:

(1)访问根结点;

(2)按照从左到右的顺序先根遍历根结点的每一棵子树。

按照树的先根遍历的定义,对图7.8 所示的树进行先根遍历,得到的结果序列为:

A B E F C D G

2.后根遍历

后根遍历的定义为:

(1)按照从左到右的顺序后根遍历根结点的每一棵子树。

(2)访问根结点;

按照树的后根遍历的定义,对图7.8 所示的树进行后根遍历,得到的结果序列为:

E F B C G D A
根据树与二叉树的转换关系以及树和二叉树的遍历定义可以推知,树的先根遍历与其转换的相应二叉树的先序遍历的结果序列相同;树的后根遍历与其转换的相应二叉树的中序遍历的结果序列相同。因此树的遍历算法是可以采用相应二叉树的遍历算法来实现的。

7.4.2 森林的遍历

森林的遍历有前序遍历和中序遍历两种方式。

1.前序遍历

前序遍历的定义为:

(1)访问森林中第一棵树的根结点;

(2)前序遍历第一棵树的根结点的子树;

(3)前序遍历去掉第一棵树后的子森林。

对于图7.10(a)所示的森林进行前序遍历,得到的结果序列为:

A B C D E F G H J I K

2.中序遍历

中序遍历的定义为:

(1)中序遍历第一棵树的根结点的子树;

(2)访问森林中第一棵树的根结点;

(3)中序遍历去掉第一棵树后的子森林。

对于图7.10(a)所示的森林进行中序遍历,得到的结果序列为:

B A D E F C J H K I G
根据森林与二叉树的转换关系以及森林和二叉树的遍历定义可以推知,森林的前序遍历和中序遍历与所转换的二叉树的先序遍历和中序遍历的结果序列相同。