6.6.2 树的孩子表示法

树的孩子链表存储表示
  typedef struct CTNode {   // 孩子结点
   int child;
   struct CTNode *next;
  } *ChildPtr;
  typedef struct {
   ElemType data;        // 结点的数据元素
   ChildPtr firstchild;     // 孩子链表头指针
  } CTBox;
  typedef struct {
   CTBox nodes[MAX_TREE_SIZE];
   int n, r;          // 结点数和根结点的位置
  } CTree;
 
   
 
  让每个结点的"子树根"构成一个线性表,以链表作它的存储结构,令其头指针和结点的数据元素构成一个结点,并将所有这样的结点存放在一个地址连续的存储空间里,所构成的树的存储结构称为树的孩子链表。当然,在需要的情况下,也可以如同双亲链表,在结点结构中加上双亲的"地址号"。

  注意,"孩子结点"中的"子树根"只存放该结点在一维数组中的下标。由于整个结构无法用一个"指针"表示,所以对整个树结构当然还需要给出结点数目和根的位置。
 
 
 
    例如,下列图示树的孩子链表如左图所示。