数据结构——树、二叉树和森林间的转换

前言

介绍

 🍃数据结构专区:数据结构

参考

该部分知识参考于《数据结构(C语言版 第2版)》129~130页

🌈每一个清晨,都是世界对你说的最温柔的早安:ૢ(≧▽≦)و✨


目录

前言

1、基础知识

2、树转换为二叉树

2.1 方法介绍:

2.2 演示

3、森林转换为二叉树

3.1 方法介绍:

3.2 演示

4、二叉树转换为树或森林

4.1 方法介绍:

4.2 演示 

结语


1、基础知识

  • 树的定义:是 n(n≥0)个结点的有限集合。当 n=0 时,称为空树;任意一棵非空树满足以下条件:  

        ⑴ 有且仅有一个特定的称为根的结点;

        ⑵ 当 n>1 时,除根结点之外的其余结点被分成 m(m>0)个互不相交的有限集合 T1,T2,…,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。


  • 二叉树的定义:二叉树是 n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。

  • 森林的定义:森林是 m(m≥0)棵互不相交的树的有限集合。该集合或者为空集(称为空森林),或者由 m 棵互不相交的树组成,其中每棵树本身又是一棵二叉树

2、树转换为二叉树

2.1 方法介绍:

加线——树中所有相邻兄弟结点之间加一条连线;

去线——对树中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其它孩子结点之间的连线;

层次调整——以根结点为轴心,将树顺时针转动一定的角度,使之层次分明。  

2.2 演示

首先这是一棵树

开始第一步,加线

随后进行第二步,删线

最后调整即可 

3、森林转换为二叉树

3.1 方法介绍:

⑴ 将森林中的每棵树转换成二叉树

⑵ 从第二棵二叉树开始,依次把一棵二叉树的根结点作为一棵二叉树根结点的右孩子,当所有二叉树连起来后,所得到的二叉树就是由森林转换的二叉树。

3.2 演示

这是一片森林

首先将每棵树都转换为二叉树

随后,从第二棵二叉树开始,将后一棵树的根节点,作为前一棵树的根节点的右孩子 

4、二叉树转换为树或森林

4.1 方法介绍:

加线——若某结点 x 是其双亲 y 的左孩子,则把结点 x 的右孩子、右孩子的右孩子、……,都与结 点 y 用线连起来;

去线——删去原二叉树中所有的双亲结点与右孩子结点的连线;

层次调整——整理由⑴、⑵两步所得到的树或森林,使之层次分明。 树的遍历序列与二叉树的遍历序列之间的对应关系 

4.2 演示 

首先是个二叉树

加线

去线 

调整

二叉树转森林,第一步是从根节点开始,若右孩子存在,就把与右孩子节点的连线删除 

剩余就是二叉树转树的步骤了


结语

这里我仅仅介绍了树和森林对于二叉树的转换,并没有介绍树和森林的遍历,对于遍历的文章我推荐这一篇文章

树和森林的遍历(动态演示) 

希望大家都有所收获!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab 车牌识别技术

1.1设计内容及要求: 课题研究的主要内容是对数码相机拍摄的车牌,进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发,涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图1-1所示。 图1-1系统总…

《手写Spring渐进式源码实践》实践笔记(第十一章 AOP-基于JDK、Cglib实现对象动态代理)

文章目录 第十一章 基于JDK、Cglib实现对象动态代理背景目标设计实现代码结构类图代理案例解析案例代码运行结果拆解案例 实现步骤 测试事先准备自定义拦截方法测试用例测试结果: 总结 第十一章 基于JDK、Cglib实现对象动态代理 背景 到本章节我们将要从 IOC 的实现…

今日头条APP移动手机端留痕脚本

这两个的脚本目的是什么呢? 很简单,就是批量访问指定用户的首页,在他人访客记录里面留下你的账户信息,可以让对方访问你的头条,概率下会关注你的头条,目的嘛,这个自己细想! 第1个是…

网页上的视频怎么下载下来?三种方法

分享三个简单好用的网页视频下载工具,值得使用! 1.IDM IDM 是一款可以提高下载速度达5倍的工具,同时具有恢复、调度和组织下载的功能。如果由于网络问题或意外的电源中断,程序将恢复未完成的下载。 IDM 还具有一个完全功能的站点…

张驰咨询:六西格玛培训费用,到底值不值得花?

六西格玛作为一种先进的管理理念和统计方法,已经在全球范围内得到了广泛的应用和认可。它旨在通过减少流程变异,提高产品质量和客户满意度,从而为企业带来持续的改进和盈利增长。随着六西格玛理念的普及,越来越多的人和企业开始寻…

spark on kubernetes运行测试

测试环境 ● kubernetes 1.20.15 ● default命名空间 ● spark 3.1.2 ● kubectl 运行架构 构建镜像 配置JAVA_HOME下载spark二进制包spark-3.1.2-bin-hadoop3.2.tgz并解压修改kubernetes/dockerfiles/spark/Dockerfile文件 ARG java_image_tag11-jre-slimFROM openjdk:${j…

HBuilder X 中Vue.js基础使用2(三)

一、条件渲染 1、条件判断 v-if : 表达式返回真值时才被渲染 v-else :表达式返回为假时不被渲染 2、 分支条件判断 v-else-if :使用v-if , v-else-if 和 v-else 来表示其他的条件分支 3、显示隐藏 v-show v-show true 把节点显示 …

持续深化信创布局,途普科技与统信软件完成产品兼容性互认证

近日,由北京途普科技有限公司(以下简称“途普科技”)自主研发的TopGraph图数据库及知识图谱构建平台已成功完成统信服务器操作系统V20的兼容性互认证,标志着途普科技在国产自控技术上又迈出了坚实的一步。 在各项严格的测试环节中…

技术成神之路:设计模式(二十一)外观模式

相关文章:技术成神之路:二十三种设计模式(导航页) 介绍 外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的接口。外观模式定义了一个高层接口,使得子系统更容易使用。 …

XJ02、消费金融|消费金融业务模式中的主要主体

根据所持有牌照类型的不同,消费金融服务供给方主要分为商业银行、汽车金融公司、消费金融公司和小贷公司,不同类型机构定位不同、提供消费金融服务与产品类型也各不相同。此外,互联网金融平台也成为中国消费金融业务最重要的参与方之一,虽其并非持牌金融机构,但借助其流量…

D50【python 接口自动化学习】- python基础之类

day50 init方法 学习日期:20241027 学习目标:类 -- 64 init方法:如何为对象传递参数? 学习笔记: 魔术方法 init方法 class Klass(object):# 定义初始化方法,类实例化时自动进行初始化def __init__(self…

AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话

AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话 目录 AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型,实现 API 形式进行聊天对话 一、简单介绍 二、创建一个聊…

基于SSM+小程序的旅游社交登录管理系统(旅游4)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 本旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理&a…

洞察前沿趋势!2024深圳国际金融科技大赛——西丽湖金融科技大学生挑战赛技术公开课指南

在当前信息技术与“互联网”深度融合的背景下,金融行业的转型升级是热门话题,创新与发展成为金融科技主旋律。随着区块链技术、人工智能技术、5G通信技术、大数据技术等前沿科技的飞速发展,它们与金融领域的深度融合,正引领着新型…

Golang 怎么高效处理ACM模式输入输出

文章目录 问题bufio.NewReader高效的原理 再次提交 问题 最近在练习牛客上单调栈题目时,要求自己处理出入输出,也就是读题库要求的输入,计算最终结果,并打印输出 当我用fmt.Scan处理输入,用fmt.Println处理输出时&am…

R语言笔记(五):Apply函数

文章目录 一、Apply Family二、apply(): rows or columns of a matrix or data frame三、Applying a custom function四、Applying a custom function "on-the-fly"五、Applying a function that takes extra arguments六、Whats the return argument?七、Optimized…

linux开机自启动三种方式

方式一、 1:rc.local 文件 1、执行命令:编辑 “/etc/rc.local” vi /ect/rc.local 2、然后在文件最后一行添加要执行程序的全路径。 例如,每次开机时要执行一个 hello.sh,这个脚本放在 / usr 下面,那就可以在 “/et…

深入了解 Android 中的命名空间:`xmlns:tools` 和其他常见命名空间

在 Android 开发中,xmlns (.xml的namespace)命名空间是一个非常重要的概念。通过引入不同的命名空间,可以使用不同的属性来设计布局、设置工具属性或者支持自定义视图等。除了 xmlns:tools 以外,还有很多常见的命名空间…

动态IP是什么?

随着互联网成为人们生活的重要组成部分,以信息传递为主导的时代种,网络连接质量对我们的工作效率、学习进度以及娱乐体验等方面都有很大影响。 动态IP,作为网络连接中的一种重要IP代理形式,越来越受到用户的欢迎。本文将深入解析…

计算机网络-CSMA/CD协议笔记及“争用期”的理解

假设a和b是总线型网络上相距最远的两个节点。 从零这个时刻a节点会往信道上发送数据,那么a节点发送的第一个比特,需要经过τ这么长的时间,也就是经过一个单向的传播时延之后。它的这个信号才可以被最远的这个节点检测到。那如果b结点在τ这个…