树:非线性结构
在计算机中,就只有顺序存储和链式存储,但是对于树结构在计算机中的存储,当然可以天马行空能想到的方法很多,但是考虑到充分利用存储空间,这里说三种主要的表示方法
a)双亲表示法:
- 以双亲作为索引关键词的一种表示方法
- 定义一个结构,对于每个节点,除了存储自身的信息,还存储着其双亲节点的位置
假设一组连续空间存储树的节点,同时在每个节点中,附设一个指示其双亲节点在数组中位置的元素,定义如下:
//树的双亲表示法节点结构定义
#define MAX_TREE_SIZE 100
typedef int ElemType;
typedef struct
{
ElemType data; //节点位置
int parent; //双亲位置
}PTNode;
typedef struct
{
PTNode nodes[MAX_TREE_SIZE];
int r; //根的位置
int n; //节点数目
}PTree;
但是,对于该种表示方法,已知孩子节点寻找双亲非常简单,时间复杂度为O(1),但是对于已知某双亲节点寻找某孩子节点,就需要遍历整个树结构。
当然可以对上述结构进行改进从而克服该缺点,就是对于每个孩子节点,再附设指示其孩子节点在数组中位置的元素,但是由于各个节点的孩子数不同,就需要根据节点度的最大值来决定需要附设几个指示元素,当然会造成空间的浪费,应了那句话---------提高空间效率便会增加时间复杂度&#x