树、森林与二叉树的转换以及树和森林的遍历

一:关于树,二叉树,森林的概念和区别可参考
(1)https://blog.csdn.net/qq_38158479/article/details/104100460
(2)https://blog.csdn.net/qq_38158479/article/details/104101826

二:树转换为二叉树
由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。

将树转换成二叉树的步骤是:
(1)加线。就是在所有兄弟结点之间加一条连线;
(2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线;
(3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。
在这里插入图片描述
三:森林转换为二叉树
森林是由若干棵树组成,可以将森林中的每棵树的根结点看作是兄弟,由于每棵树都可以转换为二叉树,所以森林也可以转换为二叉树。

将森林转换为二叉树的步骤是:
(1)先把每棵树转换为二叉树;
(2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子结点,用线连接起来。当所有的二叉树连接起来后得到的二叉树就是由森林转换得到的二叉树。
在这里插入图片描述
四:二叉树转换为树
二叉树转换为树是树转换为二叉树的逆过程,其步骤是:
(1)若某结点的左孩子结点存在,将左孩子结点的右孩子结点、右孩子结点的右孩子结点……都作为该结点的孩子结点,将该结点与这些右孩子结点用线连接起来;
(2)删除原二叉树中所有结点与其右孩子结点的连线;
(3)整理(1)和(2)两步得到的树,使之结构层次分明。

在这里插入图片描述
五:二叉树转换为森林
二叉树转换为森林比较简单,其步骤如下:
(1)先把每个结点与右孩子结点的连线删除,得到分离的二叉树;
(2)把分离后的每棵二叉树转换为树;
(3)整理第(2)步得到的树,使之规范,这样得到森林。

六:树和森林的遍历(注意:不是二叉树)
树的遍历主要有先根遍历和后根遍历:

先根遍历:若树非空,则先访问根结点,再按照从左到右的顺序遍历根结点的每一棵子树。

后根遍历:若树非空,则按照从左到右的顺序遍历根结点的每一棵子树,之后再访问根结点。

森林的遍历:需要澄清的是,只有二叉树森林才有中序遍历与完整二叉树中序遍历对应
先序遍历森林。

若森林非空,访问森林的第一棵树的根结点。
先序遍历第一棵树中根结点的子树
先序遍历除去掉遍历过的树的森林

性质:
(1)森林的前序遍历与二叉树的前序遍历结果相同
(2)森林的后序遍历与二叉树的中序遍历结果相同

参考:(1)https://blog.csdn.net/linraise/article/details/11745559
(2)https://blog.csdn.net/u011240016/article/details/52824161

发布了150 篇原创文章 · 获赞 81 · 访问量 6457

猜你喜欢

转载自blog.csdn.net/qq_38158479/article/details/104195719
今日推荐