双亲表示法+孩子链表表示法+孩子兄弟表示法
typedef int TElemType;
#define MAXSIZE 100
/*
树的存储结构
顺序存储
链式存储
R
/ | \
A B C
/ \ |
D E F
/ | \
G H K
*/
/*
树的顺序存储
双亲表示法
孩子链表表示法
树的链式存储
孩子兄弟表示法
*/
// 1、双亲表示法
// 结点:
/*
data | parent
data:存放数据
parent:存放双亲结点下标
*/
struct PTNode
{
TElemType data;
PTNode *parent;
};
// 树结构
struct PTree
{
PTNode node[MAXSIZE];// 结点数组
int r, n;// 根结点位置和结点树
};
// 2、孩子表示法
// 结点
// 1.孩子结点; 2.表头结点
/* 孩子结点
child | nextsibling
data:数据域,存放某个结点在表头数组下标
next:指针域,存储指向某个结点下一个结点的指针;
*/
struct childNode{
int child;
childNode* next;
};
typedef childNode *childLink;
/* 表头结点
data | firstchild
data:存放数据
firstchild:指针域存放孩子链表头指针;
*/
struct headNode{
TElemType data;
childLink finalChild;
};
/* 树结构 */
struct ChildTree
{
headNode node[MAXSIZE];// 结点数组
int r, n;// 根结点位置和结点树
};
// 3、孩子兄弟表示法(链式存储结构)
// 结点
/*
data | firstchild | rightsib
data:存放数据
firstchild:指针域存放第一个孩子结点存储地址;
rightsib:指针域存放孩子兄弟结点存储地址。
*/
struct CSNode
{
TElemType data;
CSNode *firstchild;
CSNode *rightsib;
};
typedef CSNode *CSTree;// 树