数据结构---树的存储结构
树的存储结构
双亲表示法
一组连续的存储单元(数组)存储树的结点,每个结点除了数据域data外,还附设一个parent域用以指示其双亲结点的位置
特点:找双亲容易,找孩子难
双亲直接访问parent域就可获得,但是要找孩子就得遍历整个结构
类型描述
typddef struct PTNode
{
TElemType data;
int parent;
}PTNode;
树结构
#define MAX_TREE_SIZE 100
typedef struct
{
PTNode nodes[MAX_TREE_SIZE];
int r,n;//根结点的位置和结点的个数
}PTree;
孩子表示法
把每个结点的孩子结点排列起来,看成是一个线性表,且以单链表做存储结构,则n个结点有n个孩子链表(叶子的孩子链表为空表)。而n个头指针又组成一个线性表,为了便于查找,可采用顺序存储结构(数组)。
这种方式结合了单链表和数组两种存储结构
特点:在没有开辟一个新空间存储双亲时,找孩子容易,找双亲难
类型描述
typedef struct CTNode
{
int child;
struct CTNode *next;
}*Childptr;
typedef struct
{
TElemType data;
childPtr firstchild;//孩子链表头指针
}CTBox;
树结构
typedef struct
{
CTBox nodes [MAX_TREE_SIZE];
int n,r;//结点数和根结点的位置
}CTree;
孩子兄弟法
以二叉链表做树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点,分别命名为 firstchild域和 nextsibling域
特点:孩子容易找,为每一个结点开辟了parent域双亲也可以找,顺着孩子指针找到孩子结点,然后顺着孩子结点的nextsibling 域可以找到所有孩子。
优点:它和二叉树的二叉链表表示完全一样, 便千将一般的树结构转换为二叉树进行处理, 利用二叉树的算法来实现对树的操作
类型描述
typedef struct CSNod
e{
ElemType data;
struct CSNode *firstchild, *ne·xtsibling;
) CSNode,*CSTree;
分类:
数据结构的学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」