树,森林的遍历,以及其与二叉树遍历之间的关系

树和森林的的遍历

  1. 树的遍历
  • 先根遍历

以下列树为演示

首先将树转化成二叉树(孩子兄弟表示法:就是每个节点的左边连着它的左孩子,右边连自己右边的第一个兄弟)

然后把转化为的二叉树进行先序遍历,中序遍历

进行先序遍历的序列为:ABEFCDGIH

进行中序遍历的序列为:EFBCIGHDA

如果树非空,则先访问根节点,然后按从左向右的顺序,先跟遍历根节点的每一棵子树。(像是对树进行类似二叉树的先序遍历)

树的先根遍历顺序与该树对应的二叉树的先序遍历顺序相同。

然后根据树的先根遍历就是二叉树的先序遍历,得出树的先根遍历为:ABEFCDGIH

  • 后根遍历

如果树非空,则按从左向右的顺序,后根遍历根节点的每一棵子树,然后访问根节点。(像是对树进行类似二叉树的后序遍历步骤)

根据树的后根遍历就是二叉树的中序遍历得出树的后根遍历为:EFBCIGHDA

森林的遍历

森林的遍历操作包括先序遍历和中序遍历两种方式。

拿如下森林举例:

首先把森林转化为二叉树,同样使用孩子兄弟表示法,节点的左孩子是树的左孩子,节点的右孩子是左孩子的右边相邻的兄弟。

转化为二叉树如下图:

  • 先序遍历

如果森林非空,则先访问第一棵树的根节点,先序遍历第一棵树的根节点的所有子树森林;

先序遍历除第一棵树之外,剩余树构成的森林。(像是对森林进行类似二叉树的先序遍历步骤)

森林的先序遍历顺序与该森林对应的二叉树的先序遍历顺序相同。

  • 中序遍历

如果森林非空,则中序遍历第一棵树的根节点的子树森林,然后访问第一棵树的根节点;

中序遍历除第一棵树之外,剩余树构成的森林。(像是对森林进行类似二叉树的后序遍历步骤)

森林的中序遍历顺序与该森林对应的二叉树的中序遍历顺序相同。

总结:

树,森林,二叉树的遍历关系

森林

二叉树

先根遍历

先序遍历

先序遍历

后根遍历

中序遍历

中序遍历

总之,如果是不会直接看出是如何遍历的,都可以先把树,森林等转化成二叉树,根据树的先根遍历对应二叉树的先序遍历,树的后根遍历对应二叉树的中序遍历;森林的先序遍历对应二叉树的先序遍历,森林的中序遍历对应二叉树的中序遍历来解答。

猜你喜欢

转载自blog.csdn.net/Yajyaj123/article/details/132129255