树与森林
树的存储结构
1.双亲表示法
双亲表示法即采用一组连续的空间表示,其中根结点的双亲用-1表示。
双亲表示法的存储结构
#define MAX_TREE_SIZE 50 //树中最多的结点数
typedef struct{
char data; //数据元素
int parent; //双亲位置
}PTNode;
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int n; //结点数
}PTree;
这种存储结构能够快速找到双亲的结点,可是在求结点的孩子时,须要遍历整个树形结构。
2.孩子表示法
种存储方式找子结点比较容易,可是找父节点,则须要遍历N个结点中孩子链表指针域所指向的N个孩子链表。
3.孩子兄弟表示法
二叉链表做为树的存储结构,每一个结点包括3部份内容——结点值、指向结点第一个孩子结点的指针和指向下一个兄弟节点的指针。
最大的优点在于能够快速的完成树转化为二叉树的操做,一样,这种结构便于寻找子结点以及兄弟结点,查找双亲结点的时候比较麻烦,若每一个结点在增设一个parent域指向其父节点,则查找父结点也很方便。
4.树、森林、二叉树的转换
树转换二叉树的规则:每一个结点左指针指向它的第一个孩子结点,右指针指向它在树中相邻的兄弟结点,可表示为“左孩子,右兄弟”,因为根结点没有兄弟,因此树转换而得的二叉树没有右子树。
树->二叉树
5、树和森林的遍历
1、树的遍历:
-
1.先根遍历:相对应为树的先序遍历
-
2.后根遍历:相对应为树的中序遍历
2、森林的遍历
先序遍历森林
-
1)访问森林中第一棵树的根结点
-
2)先序遍历第一棵树中的根节点的子树森林
-
3)先序遍历除第一课子树以后剩余的树构成森林。
中序遍历森林
-
1)中序遍历森林中第一棵树的根结点的子树森林
-
2)访问第一棵树的根结点
-
3)中序遍历除去第一棵树以后剩余的树构成的森林
本文作者:PassName
本文链接:https://www.cnblogs.com/spaceswalker/p/15884857.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步