当前位置: 首页 > article >正文

【数据结构】森林与二叉树的双向转换:原理、步骤与实例

在数据结构的树型结构中森林与二叉树的转换是一个非常核心的知识点它不仅是树的存储、遍历的基础也是很多算法实现的关键。今天我们就从原理、步骤、实例三个维度彻底搞懂这个转换规则顺便把树转二叉树的前置知识也一起梳理清楚。一、先搞懂什么是森林什么是二叉树在正式讲转换前我们先明确两个基础概念树nn≥0个结点的有限集合有且仅有一个根结点其余结点分为 m 个互不相交的子树是一种一对多的非线性结构。森林mm≥0棵互不相交的树的集合。简单来说把一棵树的根结点删掉剩下的子树就构成了一片森林反过来给森林里的每棵树加一个共同的根就变成了一棵树。二叉树每个结点最多有两个子树左子树、右子树的树型结构是一种特殊的有序树。树 / 森林是一对多的结构而二叉树是最多一对二的结构转换的核心就是用二叉树的结构来存储树 / 森林把一对多的关系转化为一对二的关系方便计算机存储和操作。二、前置知识树转二叉树森林转二叉树的基础森林转二叉树的本质是先把森林里的每棵树都转成二叉树再把这些二叉树的根结点用右孩子的方式连接起来。所以我们先搞懂树转二叉树的规则这是后续所有转换的基础。树转二叉树的 3 步核心法则加线在所有兄弟结点之间加一条连线。去线对树中的每个结点只保留它与第一个孩子结点的连线删除它与其他孩子结点之间的连线。层次调整以根结点为轴将整棵树顺时针旋转一定角度让结构层次分明。关键规则第一个孩子是二叉树结点的左孩子兄弟转过来的孩子是结点的右孩子。实例演示原树的根是 AA 的孩子是 BB 的孩子是 E、CE 的孩子是 K、FK 的孩子是 LC 的孩子是 G、DD 的孩子是 HH 的孩子是 M、II 的孩子是 J。第一步加线给兄弟结点 B-C、K-F、G-D、M-I 等加线图中红线。第二步去线只保留每个结点和第一个孩子的连线删除其他孩子的连线。第三步旋转顺时针旋转后就得到了对应的二叉树完美符合 “左孩子是第一个孩子右孩子是兄弟” 的规则。三、核心森林转二叉树树转二叉树的延伸森林转二叉树本质是先把每棵树转成二叉树再把根结点依次作为右孩子连接步骤非常清晰。森林转二叉树的 4 步法则单树转二叉树把森林中的每一棵树都按照上面的「树转二叉树」规则转换成对应的二叉树。根结点连线将每棵二叉树的根结点从左到右依次用线连接起来后一个根作为前一个根的右孩子。层次调整以第一棵树的根为轴顺时针旋转整棵树形成最终的二叉树。核心规则左孩子是原树的第一个孩子右孩子是原树的下一个兄弟 / 下一棵树的根。四、逆操作二叉树转森林二叉树还原为森林有正转换就有逆转换二叉树转森林是把二叉树还原成多棵树的过程核心是 **“拆右孩子”**步骤如下二叉树转森林的 3 步法则拆右链从根结点开始若右孩子存在就把右孩子的连线删除再对删除后的右子树重复这个操作直到所有右孩子的连线都被删除得到多棵互不相交的二叉树。单二叉树转树把每一棵拆分出来的二叉树按照「二叉树转树」的规则还原成普通树。整理结构调整每棵树的层次得到最终的森林。二叉树转树的核心规则单棵二叉树还原为树对于二叉树中的每个结点它的左孩子是原树中该结点的第一个孩子它的左孩子的所有右子孙都是原树中该结点的兄弟孩子也就是该结点的其他孩子。操作步骤加线把结点的左孩子的所有右子孙都和该结点连接起来去线删除所有结点和其右孩子的连线层次调整还原成普通树。我们用一个二叉树还原森林的例子拆右链从根 A 开始A 的右孩子不存在所以第一棵二叉树是 A 为根的树拆分后得到 3 棵独立的二叉树A-B-C-D、E-F、G-H-I。单二叉树转树第一棵A 的左孩子是 BB 的右孩子是 CC 的右孩子是 D → 还原后 A 的孩子是 B、C、D第二棵E 的左孩子是 F → 还原后 E 的孩子是 F第三棵G 的左孩子是 HH 的右孩子是 I → 还原后 G 的孩子是 H、I。最终得到 3 棵树组成的森林和上图的最终结构完全一致。五、转换的核心本质与记忆口诀核心本质树 / 森林 → 二叉树把「兄弟关系」转化为「右孩子关系」把「父子关系」转化为「左孩子关系」用二叉树的结构存储一对多的树型关系。二叉树 → 树 / 森林把「右孩子关系」还原为「兄弟关系」把「左孩子关系」还原为「父子关系」拆分出多棵独立的树。超好用记忆口诀树转二叉树兄弟连右长子留左顺时针转。森林转二叉树每树转二叉根根右相连顺时针转。二叉树转树 / 森林右链全拆开左子当长子右子变兄弟。六、为什么要做这个转换很多同学会问好好的树 / 森林为什么要转成二叉树核心原因有 3 个存储方便二叉树的结构简单用数组、链表都能轻松存储而普通树的存储需要额外记录孩子的数量复杂度高。遍历统一二叉树有成熟的前序、中序、后序遍历算法树 / 森林转成二叉树后就可以用二叉树的遍历方法来实现树 / 森林的遍历。算法兼容很多树型算法比如哈夫曼树、平衡二叉树都是基于二叉树设计的转换后可以直接复用这些算法。七、常见易错点避坑❌ 混淆左右孩子左孩子一定是原树的第一个孩子右孩子一定是兄弟 / 下一棵树的根绝对不能搞反。❌ 树转二叉树时删除左孩子连线只能删除和非第一个孩子的连线必须保留和第一个孩子左孩子的连线。❌ 二叉树转森林时只拆根的右孩子必须递归拆分所有右孩子直到没有右孩子为止不能只拆一层。❌ 森林转二叉树时根的顺序错误森林中树的顺序决定了二叉树中根的右链顺序顺序不同转换后的二叉树也不同。

相关文章:

【数据结构】森林与二叉树的双向转换:原理、步骤与实例

在数据结构的树型结构中,森林与二叉树的转换是一个非常核心的知识点,它不仅是树的存储、遍历的基础,也是很多算法实现的关键。今天我们就从原理、步骤、实例三个维度,彻底搞懂这个转换规则,顺便把树转二叉树的前置知识…...

GraphSAGE实战:用PyTorch Geometric从零实现一个‘归纳式’节点分类器(附完整代码)

GraphSAGE实战:用PyTorch Geometric实现归纳式节点分类器 在社交网络分析、推荐系统和生物信息学等领域,图数据无处不在。传统深度学习模型难以直接处理这种非欧几里得结构的数据,而图神经网络(GNN)的出现改变了这一局面。GraphSAGE作为GNN家…...

从扫地机到自动驾驶:一文看懂语义地图如何让机器人‘理解’世界(附简易构建demo)

从扫地机到自动驾驶:语义地图如何重构机器人的环境认知体系 当你的扫地机器人第5次卡在餐桌腿之间时,或许会疑惑:为什么它不能像人类一样理解"餐桌"与"椅子"的空间关系?这种困境揭示了传统机器人导航系统的致…...

【MATLAB】Table数据实战:从导入到精准提取的完整指南

1. 为什么Table数据类型是MATLAB必备技能 第一次用MATLAB处理金融数据时,我盯着从Excel导入的五千多条记录完全无从下手。数据明明导进来了,但用传统的矩阵操作怎么也提取不出想要的内容。直到发现这些数据被存储为Table类型,才真正打开了数据…...

语音识别技术选型指南:WeNet、Conformer与动态分块训练的深度对比

语音识别技术选型指南:WeNet、Conformer与动态分块训练的深度对比 在实时语音交互场景爆发的今天,技术决策者面临的核心矛盾在于:如何平衡识别准确率与系统响应速度。传统方案往往需要为流式和非流式场景分别训练模型,而WeNet提出…...

OpenClaw+Phi-3-vision-128k-instruct法律应用:合同关键条款视觉比对系统

OpenClawPhi-3-vision-128k-instruct法律应用:合同关键条款视觉比对系统 1. 为什么需要合同条款自动化比对 作为一位经常处理法律文书的从业者,我深知合同版本比对的工作量有多大。传统的人工比对方式需要逐字逐句检查,不仅耗时耗力&#x…...

OpenClaw+千问3.5-35B-A3B-FP8:智能邮件分类回复系统

OpenClaw千问3.5-35B-A3B-FP8:智能邮件分类回复系统 1. 为什么需要自动化邮件处理 每天早晨打开邮箱,看到堆积如山的未读邮件时,那种窒息感我太熟悉了。作为技术从业者,我的邮箱常年被订阅的技术周报、开源项目更新、会议邀请函…...

告别手动核对:这款TXT对比工具如何成为你的效率倍增器

1. 为什么你需要一款TXT对比工具 每天面对成堆的文本文件,你是不是经常遇到这样的场景:领导发来两个版本的合同让你核对修改点,同事传来两份客户名单要你合并去重,产品经理扔过来几百条用户反馈要你筛选关键词...手动处理这些任务…...

告别连接难题:Windows 11下Multisim主数据库稳定运行终极配置指南

1. Windows 11下Multisim主数据库连接失败的根源分析 每次打开Multisim 14.0,看着那个"主数据库连接失败"的红色警告框,是不是特别想砸键盘?作为一个在电子仿真领域摸爬滚打多年的老鸟,我太理解这种崩溃了。经过反复测试…...

5分钟搞定!用WebRTC将ESP32-CAM视频流嵌入网页(附完整代码)

5分钟实现ESP32-CAM网页视频监控:WebRTC零基础实战指南 当你想在厨房查看烤箱状态,或是在办公室监控工作室3D打印进度时,基于浏览器的实时视频方案无疑是最便捷的选择。ESP32-CAM搭配WebRTC技术,能让你用最少的代码量构建低延迟监…...

OpenClaw多模态实践:Qwen3-4B结合截图识别的表单处理

OpenClaw多模态实践:Qwen3-4B结合截图识别的表单处理 1. 为什么需要截图识别与表单处理 在日常办公中,我们经常遇到这样的场景:收到一张包含表格数据的截图,需要手动将数据录入到Excel或数据库中。这个过程不仅耗时耗力&#xf…...

C语言void指针详解与应用实践

1. 理解void指针的本质在C语言中,void指针(void *)是一种特殊类型的指针,它被称为"通用指针"或"无类型指针"。与普通指针不同,void指针不关联任何具体的数据类型,这使得它具有独特的特性和用途。1.1 void指针…...

目前支持鸿蒙的跨平台开源项目

根据搜索结果,目前支持鸿蒙的跨平台开源项目主要有以下这些,我为您整理成对比表格:项目名称技术栈/语言支持设备主要特点开源地址维护状态Flutter-OHDart,自绘引擎手机、PC谷歌开源跨平台UI框架,性能接近原生&#xff…...

seo网络优化费用高的原因是什么_如何预算seo网络优化费用

SEO网络优化费用高的原因是什么_如何预算SEO网络优化费用 随着互联网的迅猛发展,搜索引擎优化(SEO)已成为每个企业提升在线可见度和吸引客户的重要手段。SEO网络优化费用高的问题时常困扰着初创企业和中小企业。为什么SEO网络优化费用如此高…...

OpenClaw学习助手方案:Qwen3.5-9B自动整理课程PDF与生成思维导图

OpenClaw学习助手方案:Qwen3.5-9B自动整理课程PDF与生成思维导图 1. 为什么需要自动化学习助手? 去年备考PMP认证时,我每天要处理上百页PDF教材。手动整理重点、制作思维导图耗费了30%的学习时间。直到发现OpenClawQwen3.5的组合&#xff0…...

SecGPT-14B精准调教:OpenClaw自动化生成安全测试数据集

SecGPT-14B精准调教:OpenClaw自动化生成安全测试数据集 1. 为什么需要自动化安全测试数据集 作为一名长期从事安全研究的工程师,我深知高质量数据集对模型训练的重要性。传统安全测试数据收集过程存在三个痛点:人工标注耗时耗力、样本格式不…...

2025届必备的十大AI学术助手实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 因人工智能技术神速发展,AI论文工具成了学术写作范畴的关键辅助途径,…...

2026最权威的六大AI科研助手解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能领域学术论文免费获取的途径,主要涵盖开放获取数据库跟机构知识库&#…...

基于SpringBoot + Vue的社区便民服务平台

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...

开发者必备:OpenClaw+Phi-3-vision-128k-instruct自动化测试方案

开发者必备:OpenClawPhi-3-vision-128k-instruct自动化测试方案 1. 为什么需要视觉自动化测试 作为独立开发者,我经常面临一个尴尬局面:每次前端迭代后,都需要手动点击每个页面检查元素位置和样式。这种重复劳动不仅耗时&#x…...

无线LED照明系统设计(ZigBee)

一、系统介绍 本次毕业设计的题目是无线LED照明系统(Zigbee)的设计与实现。本论文就毕业设计的内容,选用Atmega16单片机作主控制器,系统地阐述了整个由Zigbee协议支持的无线LED照明系统的功能及实现。在指导老师的帮助下设计并实现…...

2026年环境工程论文降AI工具推荐:数据监测和影响评估部分

2026年环境工程论文降AI工具推荐:数据监测和影响评估部分 72%。 我收到知网检测报告那一刻,说实话有点懵。我那篇论文写了快两个月,每个字都是自己敲的。但学校的要求摆在那——AI率低于20%才能送审。折腾了几天之后,靠嘎嘎降AI…...

2026年海外高校AIGC检测现状:留学生如何应对不同平台要求

2026年海外高校AIGC检测现状:留学生如何应对不同平台要求 都在担心AI率被查出来,但真正该注意的可能不是你以为的那些事。 关于海外高校AIGC检测,我研究了一段时间发现,很多流传的「攻略」其实是错的。真正有效的应对方式&#…...

2026年毕业论文和期刊投稿降AI工具选择对比:不同场景推荐

2026年毕业论文和期刊投稿降AI工具选择对比:不同场景推荐 选降AI工具之前,建议先搞清楚自己的需求。 我整理了几款主流工具的对比,综合来看嘎嘎降AI(www.aigcleaner.com)是性价比最高的。4.8元一篇,达标率…...

如何确保SEO推广合作的投资回报率

如何确保SEO推广合作的投资回报率 在当今数字化时代,搜索引擎优化(SEO)已经成为企业数字营销的核心策略之一。无论是中小企业还是大型公司,SEO推广都是提升网站流量和转化率的重要手段。SEO推广的投资回报率(ROI&…...

嵌入式系统三大软件架构解析与选型指南

1. 嵌入式软件框架概述在嵌入式系统开发领域,软件架构的选择直接影响着项目的成败。作为一名从业十余年的嵌入式工程师,我见过太多因为架构选择不当而导致项目延期甚至失败的案例。嵌入式系统的特殊性在于资源受限、实时性要求高,这使得软件架…...

SEO_网站SEO排名下降的常见原因及解决办法(264 )

SEO: 网站SEO排名下降的常见原因及解决办法 在当前数字化营销的浪潮中,网站的SEO(搜索引擎优化)排名往往决定了一个网站能否获得足够的流量和潜在客户。许多网站在一段时间后会发现自己的SEO排名出现了明显下降,这是多方面原因造…...

C语言void指针与函数指针深度解析

1. 深入理解C语言中的void指针在C语言编程中,指针是最强大但也最容易让人困惑的特性之一。而void指针作为指针家族中的特殊成员,更是让许多初学者感到困惑。今天,我将结合自己多年的嵌入式开发经验,带大家彻底搞懂void指针的本质和…...

OpenClaw硬件监控方案:Qwen3-14B预警系统异常状态

OpenClaw硬件监控方案:Qwen3-14B预警系统异常状态 1. 为什么需要硬件监控自动化 去年夏天,我的开发机因为显卡过热导致系统崩溃,丢失了整整两天的训练进度。当时我正在跑一个重要的实验,突然黑屏的瞬间让我意识到——硬件监控不…...

OpenClaw+gemma-3-12b-it:多语言文档自动翻译系统

OpenClawgemma-3-12b-it:多语言文档自动翻译系统 1. 为什么需要本地化文档翻译方案 去年参与一个跨国协作项目时,我每天要处理数十份英文技术文档。传统翻译工具要么需要手动复制粘贴,要么存在隐私泄露风险。直到发现OpenClawgemma-3-12b-i…...