树的存储结构
廖家龙 用心听,不照做

双亲表示法:采用一组连续的存储空间来存储每个结点,同时在每个结点中增设一个伪指针,指示双亲结点在数组中的位置,根结点的下标为0,其伪指针域为-1

1
2
3
4
5
6
7
8
9
10
11
12
#define MAX_TREE_SIZE 100

typedef struct{
int data;
int parent;
}PINode;

typedef struct{
PINode nodes[MAX_TREE_SIZE];
int n;
}PTree;

孩子表示法:将每个结点的孩子结点都用单链表连接起来形成一个线性结构,n个结点具有n个孩子链表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define MAX_TREE_SIZE 100

typedef struct{
int child;
struct CNode *next;
}CNode;

typedef struct{
int data;
struct CNode *child;
}PNode;

typedef struct{
PNode nodes[MAX_TREE_SIZE];
int n;
}CTree;

孩子兄弟表示法:

1
2
3
4
5
typedef struct CSNode{
int data;
struct CSNode *firstchild,*nextsibling;
}CSNode,CSTRee;

双亲表示法:寻找结点的双亲结点效率高,寻找结点的孩子结点效率低
孩子表示法:寻找结点的孩子结点效率高,寻找结点的双亲结点效率低
孩子兄弟表示法:寻找结点的孩子结点效率高,方便实现树转换为二叉树,寻找双亲结点的效率低