第五章 树与二叉树 六、树的存储结构

一、双亲表示法(顺序存储)

结点的指针指向父节点的位置

#define MAX_Tree_Size 100
//双亲表示法
typedef struct {
    int data;//数据域
    int parent;//双亲位置域
}PTNode;

typedef struct {    //树的定义
    PTNode nodes[MAX_Tree_Size];    //双亲表示
    int n;  //结点数
}PTree;

使用数组存储每个结点

第五章 树与二叉树 六、树的存储结构_第1张图片

二、孩子表示法

使用顺序+链式存储

每个结点后接一个链表,链表是它所有的孩子结点。

第五章 树与二叉树 六、树的存储结构_第2张图片

struct CTNode {
    int child;//孩子结点在数组中的位置
    struct CTNode *next;//下一个孩子
};
typedef struct {
    int data;
    struct CTNode *firstChild;//第一个孩子
}CTBox;
typedef struct {
        CTBox nodes [MAX_TREE_SIZE];
        int n,r;//结点数和根的位置
}CTree;

三、孩子兄弟表示法

1.左结点才是它的孩子节点,右结点是它的兄弟结点。(左孩子,右兄弟)

第五章 树与二叉树 六、树的存储结构_第3张图片

四、森林转化为二叉树

1.因为B、C、D是兄弟结点,所以要用孩子兄弟表示法把它们全部作为右孩子结点

2.左边才是孩子结点

第五章 树与二叉树 六、树的存储结构_第4张图片

五、二叉树转化为森林

1.将森林中各个根节点之间看为兄弟的关系

第五章 树与二叉树 六、树的存储结构_第5张图片

你可能感兴趣的:(数据结构学习,数据结构,算法)