树与森林的存储、遍历和树与森林的转换
讨论QQ群:待定
正文
树的存储结构
双亲表示法
孩子表示法:
(a)多重链表(链表中每个指针指向一棵子树的根结点);
(b)把每个跟结点的孩子结点排列起来,看成一个线性表,且以单链表做存储结构.且N个头指针也组成一个线性表.
孩子兄弟表示法://二叉树表示法或二叉链表表示法
以二叉链表做树的存储结构,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点(fchild 和nsibling)
//孩子兄弟表示法 typedef struct CSNode{ int data; CSNode *fchild ,*nsibling; } CSNode, *CSTree;
二叉树和树都可用二叉链表作存储结构,则以二叉链表作为媒介可导出树与二叉树之间的一一对应关系。
森林和二叉树的转换
由树的二叉链表表示定义知道:任何一棵和树对应的二叉树的右子树必空。若将森林中第二棵树的根结点看成第一棵树的根结点的兄弟,如此重复……则可以导出森林和二叉树的对应关系。
树和二叉树的转换
使用孩子兄弟表示法来转换,土办法:可以把有同一个双亲结点的各个孩子结点有虚线串起来,把每层的每个结点分支从左到右除去第一个外,其余都剪掉,则剩余的图(包括虚线)就是二叉树。详细过程如下:
只有两种,森林得失先序和中序,树的是先跟和后跟
树的遍历
先访问根结点,
然后依次先根遍历根的每棵子树。
先根遍历序列,对应二叉树先序遍历
后根访问根的每棵子树,
然后访问根结点。
后根遍历序列,对应二叉树的中序遍历
森林的遍历:
先序
1.访问森林中第一棵树的根结点;
2.先序遍历第一棵树中根结点的子树森林;
3.先序遍历除去第一棵树之后剩余的树构成的森林.
先序遍历序列
中序
1.中序遍历第一棵树中根结点的子树森林;
2.访问森林中第一棵树的根结点;
3.中序遍历除去第一棵树之后剩余的树构成的森林.
中序遍历序列
欢迎关注
dashuai的博客是终身学习践行者,大厂程序员,且专注于工作经验、学习笔记的分享和日常吐槽,包括但不限于互联网行业,附带分享一些PDF电子书,资料,帮忙内推,欢迎拍砖!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现