双亲表示法
采用一组连续的存储空间来存储每个结点,同时在每个结点中增设一个伪指针,指示双亲结点在数组中的位置。根结点的下标为0,其伪指针域为-1。
#defien MAX_TREE_SIZE 100
typedef struct{
ElemType data;
int parent;
}PTNode;
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int n;
}PTree;
双亲表示法
孩子表示法
将每个结点的孩子结点都用单链表连接起来形成一个线性结构,n个结点具有n个孩子链表
#defien MAX_TREE_SIZE 100
typedef struct{
struct CNode *next;
int child;
}CNode;
typedef struct{
ElemType data;
struct CNode *next;
}PNode;
typedef struct{
PNode nodes[MAX_TREE_SIZE 100];
int n;
}CTree;
孩子表示法
孩子兄弟表示法
以二叉链表作为树的存储结构,又称二叉树表示法。
结构示意图
typedef struct CSNode{
ElemType data;
struct CSNode *firstchild,*nextsibling;
}CSNode,CSTree;
孩子兄弟表示法
三种表达方式的优缺点
优缺点说明