双亲表示法
1、以一组连续的空间进行存储
2、在每个结点设一个指示器指示其双亲节点的位置
3、以数组来实现存储结构,指示器指示的是父结点的数组下标
4、求结点的孩子时需要遍历整个结构
5、而查找根结点时只需要反复调用查找结点的父结点。
孩子表示法
1、和双亲表示法相同,结点元素存储在一组连续的存储单元中
2、但在每个结点设的指示器不在指示其双亲节点的位置,而指向一个单链表的头指针
3、这个单链表是存储其所有孩子的一个单链表结构,单链表中数据内容为对应结点的数组下标。
typedef struct CTNode{
int child;
struct CTNode * next;
}* ChildPtr;
typedef struct{
TElemType data;
ChilPtr fistChild;
}CTBox;
typedef struct{
CTBox nodes[MAX_TREE_SIZE];
int noodNum,rootM;
}CTree;
带双亲的孩子表示法
typedef struct CTNode{
int child;
struct CTNode * next;
}* ChildPtr;
typedef struct{
TElemType data;
int parent; //不同之处
ChilPtr fistChild;
}CTBox;
typedef struct{
CTBox nodes[MAX_TREE_SIZE];
int nodeNum,rootM;
}CTree;
孩子兄弟表示法
1、二叉链表表示法
2、链表中结点有两个链表指针,fistChild and nextSibling
3、firstChild为结点的第一个孩子,若该结点有第二个孩子,则存储在第一个孩子的兄弟结点(nextSibling)中.
4、以此类推nextSibling存储下一个兄弟结点。
typedef struct CSNode{
ElemType data;
struct CSNode *firstChild , *nextSibling;
}CSNode , *CSTree; //CS ? child、Sibling