树和森林的的遍历
- 树的遍历
- 先根遍历
以下列树为演示
首先将树转化成二叉树(孩子兄弟表示法:就是每个节点的左边连着它的左孩子,右边连自己右边的第一个兄弟)
然后把转化为的二叉树进行先序遍历,中序遍历
进行先序遍历的序列为:ABEFCDGIH
进行中序遍历的序列为:EFBCIGHDA
如果树非空,则先访问根节点,然后按从左向右的顺序,先跟遍历根节点的每一棵子树。(像是对树进行类似二叉树的先序遍历)
树的先根遍历顺序与该树对应的二叉树的先序遍历顺序相同。
然后根据树的先根遍历就是二叉树的先序遍历,得出树的先根遍历为:ABEFCDGIH
- 后根遍历
如果树非空,则按从左向右的顺序,后根遍历根节点的每一棵子树,然后访问根节点。(像是对树进行类似二叉树的后序遍历步骤)
根据树的后根遍历就是二叉树的中序遍历得出树的后根遍历为:EFBCIGHDA
森林的遍历
森林的遍历操作包括先序遍历和中序遍历两种方式。
拿如下森林举例:
首先把森林转化为二叉树,同样使用孩子兄弟表示法,节点的左孩子是树的左孩子,节点的右孩子是左孩子的右边相邻的兄弟。
转化为二叉树如下图:
- 先序遍历
如果森林非空,则先访问第一棵树的根节点,先序遍历第一棵树的根节点的所有子树森林;
先序遍历除第一棵树之外,剩余树构成的森林。(像是对森林进行类似二叉树的先序遍历步骤)
森林的先序遍历顺序与该森林对应的二叉树的先序遍历顺序相同。
- 中序遍历
如果森林非空,则中序遍历第一棵树的根节点的子树森林,然后访问第一棵树的根节点;
中序遍历除第一棵树之外,剩余树构成的森林。(像是对森林进行类似二叉树的后序遍历步骤)
森林的中序遍历顺序与该森林对应的二叉树的中序遍历顺序相同。
总结:
树,森林,二叉树的遍历关系
树 | 森林 | 二叉树 |
先根遍历 | 先序遍历 | 先序遍历 |
后根遍历 | 中序遍历 | 中序遍历 |
总之,如果是不会直接看出是如何遍历的,都可以先把树,森林等转化成二叉树,根据树的先根遍历对应二叉树的先序遍历,树的后根遍历对应二叉树的中序遍历;森林的先序遍历对应二叉树的先序遍历,森林的中序遍历对应二叉树的中序遍历来解答。