树
树
标签(空格分隔): DS 树
1.双亲表示法
//树的结点
typedef struct TNode
{
int data;
int parent;//双亲位置,若无双亲(根节点),则parent=-1;
//还可以添加左孩子的位置和右兄弟的位置
//int lson,rbrother;//若无左孩子或右兄弟,则值为-1
}TNode;
typedef struct
{
TNode nodes[MAX_TREE_SIZE];//树的结点数组
int r,n;//根的位置,结点数
}* PTree
2.孩子表示法
/*孩子地址结点:储存每个孩子自己的地址和指向右兄弟地址结点的指针*/
typedef struct son
{
int adress;//该孩子在family[n]中的下标,即本人
地址
struct son* rbrother;//指向储存他的右兄弟地址的节点,若无右兄弟,即空指针
}* son;
//所有成员结点
typedef struct
{
int date;//家庭成员(本人)的数据域
son lson;//头指针指向孩子地址链表头节点【储存长子(最左边的孩子)地址】,若无孩子,即空指针
}TNode;
//树结构
typedef
{
TNode nodes[MAX_TREE_SIZE];
int r,n;//根结点的位置和结点数
}* PTree;
3.双亲孩子表示法
/*孩子地址结点:储存每个孩子自己的地址和指向右兄弟地址结点的指针*/
typedef struct son
{
int adress;//该孩子在family[n]中的下标,即本人
地址
struct son* rbrother;//指向储存他的右兄弟地址的节点,若无右兄弟,即空指针
}* son;
//所有成员结点
typedef struct
{
int date;//家庭成员(本人)的数据域
int parent;//双亲地址
son lson;//头指针指向孩子地址链表头节点【储存长子(最左边的孩子)地址】,若无孩子,即空指针
}TNode;
//树结构
typedef
{
TNode nodes[MAX_TREE_SIZE];
int r,n;//根结点的位置和结点数
}* PTree;
4.孩子兄弟表示法(使复杂的树变成二叉树)
//树节点
typedef struct TNode
{
int data;
struct TNode* lson,* rbrother;
}TNode,* PTree;