📖专栏文章:数据结构学习笔记
🪪作者主页:格乐斯
前言
树的存储
- 双亲表示法
- 孩子表示法
- 孩子兄弟表示法
树、森林与二叉树的转换
树的存储
双亲表示法
首先给每个结点编号,再将这些结点的双亲结点的序号存储起来,命名为parent
这样一来,通过查询每个结点的parent并将其组织起来即可还原出二叉树
以上图这棵树为例,使用双亲表示对其进行存储
- 顺序结构存储
- 链式结构存储
孩子表示法
顺序+链式结构存储(每个结点的存储是顺序结构,孩子结点的存储是链式结构)
每个结点的孩子结点以链表的结构存储起来,孩子链表的头指针将存放在双亲结点的指针域
孩子兄弟表示法(二叉链表表示法)
存储逻辑:每个结点的左子结点为孩子,右子结点为兄弟
如下图:
树与二叉树的转换
树、二叉树转换的前提
- 两者都能使用孩子兄弟表示法转换成逻辑相同的二叉链表
- 二叉树必须遵循左结点是孩子结点,右结点是兄弟结点的逻辑
树转二叉树
如上图有一棵树,将其转为二叉树,分为以下三步骤:
-
加线:在所有兄弟结点之间加一条连线
-
去线:对树中每个结点,只保留它与第一个孩子结点的连线,删除与其他孩子结点的连线
-
层次调整:调整转换后的二叉树,使得其以二叉树的结构层次排列
二叉树转树
-
加线:重新连接双亲结点与其他孩子结点的连线
-
去线:删除兄弟结点之间的连线
-
层次调整:使转换后的树结构层次分明
森林与二叉树的转换
森林转二叉树
如上图,三棵树构成一个森林,将其转化为一棵二叉树,分为三步骤:
-
树转二叉树:先将森林的每棵树转成二叉树
-
连线:连接所有二叉树的根结点
-
层次调整:使转换后的二叉树结构层次分明
二叉树转森林
-
去线:断开二叉树根结点与 其兄弟结点之间的连线,得到一个全是二叉树的森林
-
二叉树转树:将森林里的二叉树转换成树
-
层次调整:调整转换后的树的层次结构
森林与二叉树的转换的总结
森林中的每一颗树都是兄弟,也就是说每棵树的根结点互为兄弟结点。那么在森林转二叉树的过程中,应该使用孩子兄弟表示法的逻辑连接森林中的每棵二叉树
(注:孩子兄弟表示法的逻辑是 二叉树的根结点的左结点是孩子,右节点是兄弟)
总结
本文主要介绍了树、森林与二叉树的转换,树的存储包括双亲表示法、孩子表示法、孩子兄弟表示法
文章到这结束啦,感谢阅读~
如果文章的论述或代码等出现错误,欢迎前来指正!
如果你觉得文章写的还不错,记得点赞收藏评论三连~ ❤