注意,本文归类于“二叉树练习”系列文章,但具体的解释、实现均为普通的树而并非二叉树,望读者注意。
概念
双亲表示法,即储存树结点的同时储存其所属的父结点的表示法,通常利用顺序表(数组)实现。使用双亲表示法储存树,使得树具有如下特性:
- 可以快速地找到一个结点的父结点
- 寻找一个结点的子节点需要遍历整颗树
结构定义
使用C++实现。需要注意,Tree结构体内的Node数组不是以指针的形式定义,而下文Tree结构体却使用指针来储存,要注意区分指针的解引用符号“->”和对象的“.”符号的区别。
const int MAX_SIZE = 102; //数组的大小,即整颗树可以有的最多结点数量,我定为102
//树结点
struct Node
{
char data; //树结点所携带的数据
int parent; //该结点对应的父亲结点的数组下标
};
//树
struct Tree
{
Node nodes[MAX_SIZE]; //存放所有树结点的数组
int size; //树结点数量
};
创建树
为方便起见,这里使用王道数据结构书里给的树结构作为例子,树的结构示意图如下:
使用双亲表示法表示后:
代码:
Tree *CreateTree()
{
Tree *tree = (Tree *)malloc(sizeof(Tree))