目录
一、树的逻辑结构
二、双亲表示法(顺序存储)
双亲表示法:每个结点中保存指向双亲的“指针”
#define MAX_TREE_SIZE 100
typedef struct{
ElemType data;
int parent;
}PTNode;
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int n;
}PTree;
1.新增数据元素
2.删除数据元素
方案1:
方案2:
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int n;
}PTree;
3.优缺点
三、回顾:二叉树的顺序存储
四、孩子表示法(顺序+链式存储)
孩子表示法:顺序存储各个节点,每个结点中保存孩子链表头指针
struct CTNode{
int child; //孩子结点在数组中的位置
struct CTNode *next //下一个孩子
};
typedef struct{
ElemType data;
strcut CTNode *firstChild; //第一个孩子
}CTBox;
typedef struct{
CTBox nodes[MAX_TREE_SIZE];
int n,r; //结点数和根的位置
}CTree;
五、孩子兄弟表示法(链式存储)
//数的存储——孩子兄弟表示法
typedef struct CSNode{
ElemType data; //数据域
struct CSNode *firstchild,*nextsibling; //第一个孩子和右兄弟指针
}CSNode,*CSTree;
1.树和二叉树的转化
六、森林和二叉树的转换
本质:用二叉链表存储森林
七、总结