1 双亲表示法
data |
parent |
存储某个结点的数据信息 |
存储该结点的双亲所在数组中的下标 |
#define MAX 50
typedef struct TreeNode{
int data; // 数据域
int parent; // 双亲结点的下标
} TNode;
typedef struct Tree{
TNode nodes[MAX]; // 结点数组
int n; // 当前结点数
} T;
2 孩子表示法
2.1 孩子表示法
data |
firstchild |
存储某个结点的数据信息 |
存储该结点的孩子链表的头指针 |
data |
next |
存储某个结点在表头数组中的下标 |
存储指向某结点的下一个孩子结点的指针 |
#define MAX 50
typedef struct ChildNode{ // 孩子链表的孩子结点
int data; // 数据域
struct ChildNode *next; // 下一个孩子结点
} CNode;
typedef struct TreeNode{ // 表头数组的表头结点
int data; // 数据域
CNode *firstChild; // 孩子链表的头指针
} TNode;
typedef struct Tree{
TNode nodes[MAX]; // 结点数组
int n; // 结点总数
}
2.2 双亲孩子表示法
data |
parent |
firstchild |
存储某个结点的数据信息 |
存储该结点的双亲所在数组中的下标 |
存储该结点的孩子链表的头指针 |
data |
next |
存储某个结点在表头数组中的下标 |
存储指向某结点的下一个孩子结点的指针 |
#define MAX 50
typedef struct ChildNode{ // 孩子链表的孩子结点
int data; // 数据域
struct ChildNode *next; // 孩子链表的头指针
} CNode;
typedef struct TreeNode{ // 表头数组的表头结点
int data; // 数据域
int parent; // 双亲结点的下标
CNode *firstChild; // 下一个孩子结点
} TNode;
typedef struct Tree{
TNode nodes[MAX]; // 结点数组
int n; // 结点总数
}
3 孩子兄弟表示法
data |
firstchild |
rightsib |
存储某个结点的数据信息 |
存储该结点的孩子链表的头指针 |
存储该结点的右兄弟结点的存储地址 |
typedef struct TreeNode{
int data; // 数据域
struct TreeNode *firstChild; // 孩子链表的头指针
struct TreeNode *rightsib; // 右兄弟的地址
} TNode, *Tree;