树的存储结构

树的存储结构

双亲表示法

以一组连续的空间存储树的结点,同时在每个结点中,附设一个指示器指示器双亲结点在数组中的位置
结点结构如表1所示:


表1-结点结构

其中data是数据域,存储结点的数据信息。而parent是指针域,存储该结点的双亲在数组的下标。

定义代码

/* 树的双亲表示法结点结构定义 */
#define MAX_TREE_SIZE 100
typedef int TElemType;      //树结点的数据类型

typedef struct PTNode{      //结点结构
    TElemType data;         //结点数据
    int parent;             //双亲位置
}  PTNode;
typedef struct{
   	 PTNode nodes[MAX_TREE_SIZE];    //结点数组
     int r, n;              //根的位置和结点数
}PTree;

约定根结点的位置域设置为-1

如图1的树结构和表2中的树双亲表示所示:


表2-树的双亲表示法

图1-树结构图

改进:

  1. 关注结点孩子:设置左孩子域(长子域),如果没有孩子的结点,这个长子域就设置为-1。
  2. 关注结点兄弟:设置右兄弟域,记录下右兄弟的下标。如果右兄弟不存在,这赋值为-1。

存储结构的设计是一个非常灵活的过程。一个存储结构设计得是否合理,取决于基于该存储结构的运算是否适合、是否方便,时间复杂度好不好等。

孩子表示法

待更…

posted @ 2019-07-22 00:18  信仰不悔  阅读(18)  评论(0)    收藏  举报