本文主要是介绍树的双亲表示法(详解)——c语言形式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
双亲表示法采用一组连续的存储空间来存储每个节点,同时在每个节点中增设一个尾指针(指针用于指向其父节点在数组中的位置——即其父节点的数组下标)
(图与后面代码均来源于王道数据结构考研复习指导)
如上图所示,(b)为树(a)在双亲表示法下的存储形式。
(b)中有三列数据
表格左侧外部一列(0 1 2 3 ...)为对应下标,即数组下标,代表节点的编号
根节点下标为0,其伪指针为-1(因为其没有父节点)
表格内第一列(data)为存储的各个节点,(图中顺序则是按树的层次遍历顺序排列)
表格内第二列(parent)即为对应节点的伪指针
如(b)中 A、B、C三个结点的parent 值均为0,即其指向数组下标为0的节点(即R)
后面同理
代码实现:
#define MAX_TREE_SIZE 100 //树中最多结点数
typedef struct{ //数的结点定义 Elemtype data; //数据元素 int parent; //双亲位置域
}PTNode;
typedef struct{ //树的类型定义 PTNode nodes[MAX_TREE_SIZE]; //双亲表示 int n; //结点数
}PTree;
该存储结构可以很快得到每个节点的双亲结点,但求节点孩子时需要遍历整个结构
树的存储结构与二叉树的存储结构的区别
在树的顺序存储结构中,数组下标代表结点的编号,下标中所存的内容指示了结点之间的关系。
在二叉树的顺序存储结构中,数组下标既代表结点编号,又指示了二叉树中各节点之间的关系。
二叉树属于树,所以二叉树都可以用树的顺序存储结构来存储
但树不可以用二叉树的顺序存储结构来存储
这篇关于树的双亲表示法(详解)——c语言形式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!