树的六种存储结构
-
父指针表示法
用两个等大小的数组存储。第一个存储结点的data
,第二个存储每个结点父亲结点的标号
(即父亲结点在第一个数组中的下标)
注:这种表示法用于实现并查算法,每个结点只知父结点,不知子结点
-
子结点表表示法
用邻接表存储。开一个存储元素为头结点的指针的一维数组,每个头结点后连一条单链表,链表结点存储元素为子结点在数组中的下标。
注:这种表示法为图的邻接表存储方式,每个结点只知子结点,不知父结点,树是一种特殊的图。
-
带双亲的孩子链表
将双亲表示法与孩子表示法相结合。
-
孩子兄弟表示法
存储在数组中的每个结点都存储结点的值,以及指向父结点、最左子结点和右兄弟结点,三个指针唯一确定了结点在树中的位置
-
动态孩子兄弟表示法
用二叉链表存储。每个结点有两个链域:firstchild、nextsibling,分别指向结点的第一个孩子结点以及下一个兄弟结点。
注:这种方法十分重要,是将树和森林转化为二叉树形式的重要手段
如下图
可以发现,这样转化而来的二叉树,其右子树为空,这个结论很重要,他直接导出了将森林转化为二叉树的方法
-
顺序表示法
这种方法通常用于序列化(serialize)树结构,将树以一系列字节形式压缩在磁盘上以备传输或日后使用。
注:这对于分布式处理环境中的数据结构很重要