数据结构——树——孩子表示法
数据结构——树——孩子表示法
由于树中每个结点可能有多棵子树,可以考虑用多重链表,即每个结点有多个指针域,其中每个指针指向一棵子树的根结点,我们把这种方法叫做多重链表表示法。不过,树的每个结点的度,也就是它的孩子个数是不同的。
具体办法是,把每个结点的孩子结点排列起来,以单链表作存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为
空。然后n个头指针又组成一个线性表,采用顺序存储结构,存放进一个一维数组中,如图6-4-4所示。
为此,设计两种结点结构,一个是孩子链表的孩子结点,如表6-4-7所示。
其中child是数据域,用来存储某个结点在表头数组中的下标。next是指针域,用来存储指向某结点的下一个孩子结点的指针。
另一个是表头数组的表头结点,如表6-4-8所示。
其中 data是数据域,存储某结点的数据信息。firstchil是头指针域,存储该结点的孩子链表的头指针。
以下是我们的孩子表示法的结构定义代码。
/*树的孩子表示法的结构定义*/
#define MAX_TREE_SIZE 100
typedef int TElemType;/*树结点的数据类型*/
typedef struct CTNode /*孩子结点*/
{
int child;
struct CTNode* next;
}*ChildPtr;
typedef struct /*表头结点*/
{
TElemType data;
ChildPtr firstchild;
} CTBox;
typedef struct /*树结构*/
{
PTNode nodes[MAX_TREE_SIZE];/*结点数组*/
int r, n; /*根的位置和结点数*/
} CTree;
还没有评论,来说两句吧...