树的存储结构:
- 双亲表示法
- 孩子表示法
- 孩子兄弟表示法
双亲表示法:
双亲表示法中,在每个结点中,附设一个指示器指示其双亲结点到链表中的位置。
双亲表示法的结构定义:
#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; /*root position and point*/ } PTree;
孩子兄弟表示法:
原理:任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟结点如果存在也是唯一的。
结构定义
#define TElemType int typedef struct CSNode { TElemType data; struct CSNode *Firstchild, *NextSibling; } CSNode, *CSTree;
孩子表示法:
把每个结点的孩子结点排列起来,以单链表作为存储结构。则n个结点有n个孩子链表,如果是叶子结点,则这个单链表为空。然后n个头指针双组成一个线性表,采用顺序存储结构,存放在一个一唯数组中。
结构定义:
#define MAX_TREE_SIZE 100 /*孩子结点*/ typedef struct CTNode { int child; struct CTNode *next; } *childPtr; /*表头结构*/ typedef struct { TElemType data; ChildPtr firstchild; } CTBox; /*树结构*/ typedef struct { CTBox nodes[MAX_TREE_SIZE]; int r,n; }