【数据结构】树、森林与二叉树的转换 |树的存储 |双亲表示法 |孩子表示法 |孩子兄弟表示法

news2024/10/6 4:01:50

📖专栏文章:数据结构学习笔记
🪪作者主页:格乐斯

前言

树的存储

  • 双亲表示法
  • 孩子表示法
  • 孩子兄弟表示法

树、森林与二叉树的转换

树的存储

双亲表示法

首先给每个结点编号,再将这些结点的双亲结点的序号存储起来,命名为parent

这样一来,通过查询每个结点的parent并将其组织起来即可还原出二叉树

在这里插入图片描述

以上图这棵树为例,使用双亲表示对其进行存储

  • 顺序结构存储

在这里插入图片描述

  • 链式结构存储

在这里插入图片描述


孩子表示法

顺序+链式结构存储(每个结点的存储是顺序结构,孩子结点的存储是链式结构)

在这里插入图片描述

每个结点的孩子结点以链表的结构存储起来,孩子链表的头指针将存放在双亲结点的指针域


孩子兄弟表示法(二叉链表表示法)

存储逻辑:每个结点的左子结点为孩子,右子结点为兄弟

如下图:
在这里插入图片描述


树与二叉树的转换

树、二叉树转换的前提

  • 两者都能使用孩子兄弟表示法转换成逻辑相同的二叉链表
  • 二叉树必须遵循左结点是孩子结点,右结点是兄弟结点的逻辑

树转二叉树

在这里插入图片描述

如上图有一棵树,将其转为二叉树,分为以下三步骤:

  1. 加线:在所有兄弟结点之间加一条连线
    在这里插入图片描述

  2. 去线:对树中每个结点,只保留它与第一个孩子结点的连线,删除与其他孩子结点的连线
    在这里插入图片描述

  3. 层次调整:调整转换后的二叉树,使得其以二叉树的结构层次排列
    在这里插入图片描述


二叉树转树

  1. 加线:重新连接双亲结点与其他孩子结点的连线
    在这里插入图片描述

  2. 去线:删除兄弟结点之间的连线
    在这里插入图片描述

  3. 层次调整:使转换后的树结构层次分明
    在这里插入图片描述


森林与二叉树的转换

森林转二叉树

在这里插入图片描述

如上图,三棵树构成一个森林,将其转化为一棵二叉树,分为三步骤:

  1. 树转二叉树:先将森林的每棵树转成二叉树
    在这里插入图片描述

  2. 连线:连接所有二叉树的根结点
    在这里插入图片描述

  3. 层次调整:使转换后的二叉树结构层次分明
    在这里插入图片描述


二叉树转森林

  1. 去线:断开二叉树根结点与 其兄弟结点之间的连线,得到一个全是二叉树的森林
    在这里插入图片描述

  2. 二叉树转树:将森林里的二叉树转换成树
    在这里插入图片描述

  3. 层次调整:调整转换后的树的层次结构
    在这里插入图片描述

森林与二叉树的转换的总结

森林中的每一颗树都是兄弟,也就是说每棵树的根结点互为兄弟结点。那么在森林转二叉树的过程中,应该使用孩子兄弟表示法的逻辑连接森林中的每棵二叉树

(注:孩子兄弟表示法的逻辑是 二叉树的根结点的左结点是孩子,右节点是兄弟)


总结

本文主要介绍了树、森林与二叉树的转换,树的存储包括双亲表示法、孩子表示法、孩子兄弟表示法


文章到这结束啦,感谢阅读~

如果文章的论述或代码等出现错误,欢迎前来指正!

如果你觉得文章写的还不错,记得点赞收藏评论三连~ ❤

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始实现自己的串口调试助手(1) - ui界面搭建

UI 界面搭建 ui界面整体演示 ui对象拆分 更多的细节就不方便展开了,下面有提示完成ui设计的提示 在创建工程前 记得把编码改为utf-8 ui设计技巧: ctrl 鼠标左键实现拖动实现复制粘贴 groupBox : 带标题的文本框 栅格布局 -- 只有一个控件的时候会铺满…

C++使用范围for语句处理多维数组

循环访问二维数组时出现如下问题: error: invalid range expression of type int *; no viable begin function availablefor (auto col : row){^ ~~~ 1 error generated.问题复现 初始化数组 constexpr size_t rowCnt 3, colCnt 4; int ia[rowCnt][colCnt]; fo…

【网站项目】SpringBoot380百天公司财务管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

AD162A低功耗语音解码芯片,助眠耳机方案推荐—云信通讯

睡眠一直是很多人所追寻的目标,无论是因为工作压力过大,还是日常烦扰的思绪,一个好的睡眠质量对每个人来说都至关重要。为了解决这个问题,一些科技公司开发了高品质的助眠耳机,通过音乐和声音来帮助入睡,为…

618好物推荐,每一款都是心头好

618买什么?!是不是又要开始剁手了?!买贵不如买对,收下这份好物推荐,无论你是有购物需求还是观望中,无论是日常好物还是智能家电,无论你是追求平价还是实用,这一篇好物推荐…

eNSP-集线器(hub)连接局域网

一、拓扑结构搭建 二、主机配置 pc1、pc2、pc3 三、测试 Hub相当于大家共享一条线路(类似于电线搭电),线路上的所有的设备都会接收同样的信息。

【MySQL02】【 InnoDB 记录存储结构】

文章目录 一、前言二、InnoDB 行格式1. COMPACT 行格式1.1 记录的额外信息1.2 记录的真实数据1.3 综上 2. REDUNDANT 行格式2.1 字段长度偏移列表2.2 记录头信息 3. DYNAMIC 行格式和 COMPPESED 行格式 三、InnoDB 数据页结构1. File Header (文件头部)2. Page Header (页面头部…

搭建淘宝扭蛋机小程序:技术选型与最佳实践

随着移动互联网的快速发展,小程序作为一种轻量级应用,以其无需安装、即用即走的特点,受到了广大用户的喜爱。在电商领域,淘宝作为国内最大的电商平台之一,也积极拥抱小程序技术,为用户提供更加便捷、个性化…

纯CSS画浮动卡通蓝天白云草坪动画效果

文章目录 效果展示 背景效果实现效果展示HTML结构CSS样式 云效果实现效果展示HTML结构CSS样式 草效果实现单颗小草效果展示HTML结构CSS样式 组合小草效果展示HTML结构CSS样式 完整代码 在网页设计中,添加动态元素如浮动云朵可以为用户带来更加生动和自然的体验。虽然…

BeanDefinition作用

BeanDefinition接口 BeanDefinition 描述一个 Bean 实例,这个实例有哪些属性值、构造函数以及一些其他信息,就是描述Bean实例的信息。 BeanDefinition是一个接口,允许BeanFactoryPostProcessor 内省和修改属性值和其他 Bean 元数据。 点击了…

【simple-admin】simple-admin-core 首次服务启动 如何配置mysql数据库表 | 如何docker启动core

一、下载启动S-A 1、下载源码 https://github.com/suyuan32/simple-admin-core.git git clone https://github.com/suyuan32/simple-admin-core.git2、修改etc下yaml配置 需要对RPC和API 分别2个文件夹下的etc下的yaml进行修改 替换成我们的数据库 3、初始化数据库 核心代…

芯课堂 | UI Creator 物理键盘移植指南

LVGL提供输入设备的种类一共有5种,分别是:touchpad(触摸板)、mouse(鼠标)、keypad(键盘)、encoder(编码器)、button(外部按键)。而基于…

抖音直播预告|换新·升级 Aigtek安泰电子2024新产品发布会

多系列功放产品大升级! 深耕电子测试仪器领域,攻坚行业尖端技术,不断自主研发与创新,是安泰电子一如既往的坚持!通过长久技术积淀,Aigtek安泰电子多系列功放也在2024年迎来了全新升级! 本次我们…

青年精英大会笔记

2024年5月16日上午 大会主席致辞【郑纬民】 郑纬民【清华大学教授、中国工程院院士】——78岁【看着精神抖擞】!牛哇 学件初步探索【周志华】 南京大学 zhouzhnju.edu.cn Preliminary Exploration to Learnware 土生土长的 听完介绍感觉这个研究工作很不错&…

go语言中的一个特别的语法 //go:embed 可将将静态文件内容读取到string, []byte和 embed.FS 变量并直接打包到exe包中

go语言中的一个特别的语法 //go:embed 看上去像是注释,实则是golang中的一个内置的语法,而且是仅在你的go代码编译时生效的语法, 借助他我们可以将我们的静态资源文件读取到FS直接打包到我们的exe执行文件中。 同时他还支持文件的模式匹配…

揭秘未来,开启盲盒新篇章——打造你的专属盲盒小程序

一、引言 在这个充满未知与惊喜的时代,盲盒文化已经深入人心,成为年轻人追求新奇、体验刺激的新宠。如今,随着科技的快速发展,盲盒文化也迎来了全新的发展机遇。我们诚挚地邀请您一同踏上这场盲盒小程序开发的旅程,共…

通用代码生成器应用场景一,项目前期

通用代码生成器是一种自动化编程软件,是一种先进的编译系统。它具有表级抽象。把系统抽象为域对象,枚举,弹性登录模块,复杂版面和图形报表。使用通用代码生成器完成项目前期,比直接使用对应的高级语言快的多&#xff0…

秋招突击——算法打卡——5/24——两数之和

题目描述 实现代码 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {int addNumber 0;// 表示进位ListNode* res ListNode();ListNode* curNode res;while(l1 && l2){curNode.value (l1.value l2.value addNumber) % 10 addNumber (l1.value l2.value…

当消费遇上AI:大模型如何成为行业“网红”?

在一个繁忙过后的周五晚上,美食发烧友Melissa和朋友痛快的享受了一顿海底捞火锅,餐毕,她像往常一样留下了服务评价,及时反馈是一位美食家的基本素养。 每天如同Melissa一样留下评价的客人不在少数,他们的真实体验反馈…

软件测试/测试开发丨学习笔记之Allure2测试报告

Allure2测试报告 1、使用 Allure2 运行方式-Python 1)–alluredir 参数生成测试报告。 在测试执行期间收集结果 pytest [测试用例/模块/包] --alluredir./result/ (—alluredir这个选项 用于指定存储测试结果的路径)#生成在线的测试报告 allure serve ./result2…