数据结构---森林与二叉树的转换
森林和二叉树的转换
树<------->二叉树
由于树和二叉树都可以用二叉链表作存储结构,以二叉链表为媒介可以建立树与二叉树的关系
树用二叉树表示法(孩子兄弟法)来表示存储结构可以解释为二叉树的样子
二叉树的存储就是左指针指向左孩子,右指针指向右孩子它的解释也是为二叉树的样子
实际上两者的存储结构不一样,但都可以解释为二叉树的样子
树变二叉树记忆方法:兄弟相连留长子
二叉树变树记忆方法:左孩右右连双亲,去掉原来右孩线
森林<------>二叉树
森林变二叉树记忆方法:树变二叉根相连
- 将各棵树分别转换成二叉树
- 每棵树的根结点按用线相连
- 以第一棵树根结点为二叉树的根,再以根结点为轴心顺时针旋转,构成二叉树型结构
二叉树变森林记忆方法:去掉全部右孩线,孤立二叉再还原
- 将二叉树中根结点与其右孩子连线,及沿右分支搜索到所有右孩子间连线全部抹掉,使之变成孤立的二叉树
- 将孤立的二叉树全部还原
树和森林的遍历
树的遍历有先根和后根两种,这里区别于二叉树的三种遍历,二叉树的子树有左右之分,所以多一种遍历方式,实际上还可以按层次遍历,即若树不空,自上而下自左向右依次访问树中每个结点
先根:先访问树的根结点,然后依次先根遍历根的每棵子树
后根:先依次后根遍历每棵子树,然后访问根结点
而森林又是由树构成,也是有两种遍历方法
将森林看作三部分:1.森林中第一棵树的根结点2.森林中第一棵树的子树森林3.森林中其他树构成的森林
先序遍历
- 访问森林中第一棵树的根结点
- 先序遍历森林中第一棵树的子树森林
- 先序遍历森林中其他树构成的森林
中序遍历
- 中序遍历森林中第一棵树的根结点的子树森林
- 访问第一棵树的根结点
- 中序遍历除去第一棵树之后剩余的树构成的森林