树森林二叉树的相互转换及遍历树与森林

森林 与 树 与 二叉树

将树转换为二叉树的步骤

1.加线 在所有兄弟结点之间加一条连线
2.去线 对树中的每个结点,只保留与他第一个孩子结点的连线删除它与其它孩子结点之间>的连线.
3.层次调整,以树的根节点为轴心,将整棵树顺时针旋转一定的角度使之结构分明,注意第一 个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子.

森林是由若干棵树的组成,所以可以理解为森林中的每一棵树都是兄弟
森林转化为二叉树步骤

1.把每个树转为二叉树
2.第一颗二叉树不动,从第二颗二叉树开始,依次把后一颗二叉树的根节点作为前一颗二叉树的根节点的右孩子,用线连接 起来.当所有的二叉树连接起来后就得到了由森林转换来的二叉树

判断一个儿叉树能够转换为一颗树还是森林,标准很简单

那就是只要看这颗二叉树的根节点有没有右孩子,有就是森林没有就是一棵树,

二叉树转为树步骤
二叉树转换为树是树转换为二叉树的逆过程,也就是反过来做

1.加线. 若某结点的左孩子结存在, 则将这个左孩子的右孩子结点右孩子的右孩子结点, 右孩子的右孩子的右孩子结点…反正就是左孩子的n个右孩子结点都作为此节点的孩子,将该结点与这些右孩子结点用线连接起来.
2.去线,删除原二叉树中所有结点与其右结点的连线
3.层次调整,使之结构层次分明

二叉树转化为森林步骤

1.从根节点开始,若右孩子存在,把与右孩子结点连线删除,再查看分离后的二叉树,若有右孩子存在,则删除连线,直到所有的右孩子连线都删除为止,得到分离的二叉树.
2.再将每棵分离的二叉树转换为树即可

//树与森林的遍历/
/*
树的遍历分为两种
1.先根遍历树,即先访问树的根节点,然后依次先根遍历根的每颗子树
2.后根遍历,即先依次后根遍历每棵子树,然后再访问根结点,

*/
/*
森林的遍历
前序遍历: 先访问森林中第一棵树的根结点,然后依次先根遍历
根的每颗子树,再依次用同样的方式遍历去除第一棵树的剩余树构成
的森林

后序遍历 : 先访问森林中第一棵树,后根遍历的方式遍历每课子树,
然后再访问根节点,再以同样的方式遍历除去第一颗树的剩余树构成
的森林.


森林的前序遍历和二叉树的前序遍历的结果相同,
森林的后序遍历和二叉树的中旭遍历结果相同,
*/

你可能感兴趣的:(数据结构与算法,数据结构与算法)