标签(空格分隔): 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;
posted @ 2023-06-04 02:22  刘倩_网安2211  阅读(11)  评论(0编辑  收藏  举报