数据结构---森林与二叉树的转换

森林和二叉树的转换

树<------->二叉树

由于树和二叉树都可以用二叉链表作存储结构,以二叉链表为媒介可以建立树与二叉树的关系

树用二叉树表示法(孩子兄弟法)来表示存储结构可以解释为二叉树的样子

二叉树的存储就是左指针指向左孩子,右指针指向右孩子它的解释也是为二叉树的样子

image-20220127211635928

实际上两者的存储结构不一样,但都可以解释为二叉树的样子

树变二叉树记忆方法:兄弟相连留长子

image-20220127212407952

二叉树变树记忆方法:左孩右右连双亲,去掉原来右孩线

image-20220127212518971
森林<------>二叉树

森林变二叉树记忆方法:树变二叉根相连

  • 将各棵树分别转换成二叉树
  • 每棵树的根结点按用线相连
  • 以第一棵树根结点为二叉树的根,再以根结点为轴心顺时针旋转,构成二叉树型结构
image-20220127213112011

二叉树变森林记忆方法:去掉全部右孩线,孤立二叉再还原

  • 将二叉树中根结点与其右孩子连线,及沿右分支搜索到所有右孩子间连线全部抹掉,使之变成孤立的二叉树
  • 将孤立的二叉树全部还原
image-20220127213809643

树和森林的遍历

树的遍历有先根和后根两种,这里区别于二叉树的三种遍历,二叉树的子树有左右之分,所以多一种遍历方式,实际上还可以按层次遍历,即若树不空,自上而下自左向右依次访问树中每个结点

先根:先访问树的根结点,然后依次先根遍历根的每棵子树

后根:先依次后根遍历每棵子树,然后访问根结点

而森林又是由树构成,也是有两种遍历方法

将森林看作三部分:1.森林中第一棵树的根结点2.森林中第一棵树的子树森林3.森林中其他树构成的森林

先序遍历
  • 访问森林中第一棵树的根结点
  • 先序遍历森林中第一棵树的子树森林
  • 先序遍历森林中其他树构成的森林
中序遍历
  • 中序遍历森林中第一棵树的根结点的子树森林
  • 访问第一棵树的根结点
  • 中序遍历除去第一棵树之后剩余的树构成的森林

image-20220127215450424

posted on 2022-02-06 20:35  眉目作山河  阅读(384)  评论(0编辑  收藏  举报

导航