树、森林与二叉树的转换及遍历

(数据结构)树转换为二叉树、森林转换为二叉树、二叉树转换为树、二叉树转换为森林及树与森林的遍历 1、树转换为二叉树 (1)加线。在所有兄弟结点之间加一条线。 (2)去线。对树中每个结点,只保留它与第一个孩子结点的连线,删除它与其他孩子结点之间的连线。 (3)层次调整。以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。注意第一个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子。 注意:层次调整时很容易弄错左右孩子的关系,第一个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子。 2、森林转换为二叉树 (1)把每棵树转换为二叉树。 (2)第一棵二叉树不动,从第二棵二 阅读详情

1.树、森林与二叉树的转换

前面介绍的孩子兄弟存储结构可以将树转换为二叉树。这样我们就可以使用二叉树的算法来解决普通树的问题。

1.树转换为二叉树

将树转换为二叉树的步骤如下:

  1. 加线。在所有相邻的兄弟结点之间加一条线。
  2. 去线。对树中的每个结点。只保留它与第一个孩子结点的连线,删除它与其他孩子结点之间的连线。
  3. 层次调整。原来结点第一个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子。

图1

2.森林转换为二叉树

将森林转换为二叉树的步骤如下:

  1. 把每棵树都转换为二叉树。
  2. 第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,用线连接起来。当所有二叉树连接起来后就得到了由森林转换来的二叉树。
    图2

3.二叉树转换为树

二叉树转换为树是树转换为二叉树的逆过程:

  1. 加线。若某结点左孩子存在,则将该左孩子的结点的右孩子结点、右孩子的右孩子结点、右孩子的右孩子的右孩子结点。。。。即左孩子下属的所有右孩子结点都作为该结点的孩子。将该结点与这些右孩子结点用线连接起来。

  2. 去线。将原二叉树中所有结点与其右孩子结点的连线删除。

  3. 层次调整。

  4. 二叉树转换为森林


判断一棵树能够转换为一棵树还是森林,只需看这颗二叉树根结点是否具有右孩子,有右孩子就是森林,没有右孩子就是一棵树。转换为森林的步骤如下:

  1. 从根结点开始,若右孩子存在,则把右孩子结点的连线删除,再查看分离后的右子树,若该右子树的根结点右孩子存在,则连线删除,直到所有右孩子连线都删除为止,得到若干分离的二叉树。
  2. 将每棵二叉树转换为树。

2.树和森林的遍历

1.树的遍历

由树结构定义可引出两种次序遍历树的方法:一种是先根遍历,即先访问树的根结点,然后依次先根遍历根的每棵子树。另一种是后根遍历,即先依次后根遍历每棵子树,然后再访问根结点。例如对下图中的树进行遍历,其先根遍历为:ABEFCDG;后根遍历为:EFBCGDA。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ka3cGMQ7-1586162371190)(https://img-blog.youkuaiyun.com/20170620165758138?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemp3X3B5dGhvbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]

2.森林的遍历

森林的遍历也分为两种方式:一种是先序遍历,即先访问森林中第一棵树的根结点,再先根遍历第一棵树的子树,再依次用同样方式遍历除去第一棵树的剩余树构成的森林。另一种是后序遍历,即先后根遍历森林中第一棵树的子树,再访问第一棵树的根结点,然后依次用同样方式遍历除去第一棵树的剩余树构成的森林。例如对下图的森林进行遍历,其先序遍历为:ABCDEFGHJI;后序遍历为:BCDAFEJHIG。
图4
我们可以看见,森林的先序遍历和后序遍历与其对应的二叉树的先序遍历和中序遍历相同。由此可见,当以二叉链表作树的存储结构时,树的先根遍历和后根遍历可借用二叉树的先序遍历和中序遍历算法实现。


如果觉得这篇文章帮助了您,请打赏一个小红包鼓励作者继续创作哦!!!

在这里插入图片描述

树、森林与二叉树的转换,树的后续遍历就是二叉树的中序遍历。 树的后续遍历就是二叉树的中序遍历。 1、树转换为二叉树 由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。 将树转换成二叉树的步骤是: (1)加线。就是在所有兄弟结点之间加一条连线; (2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线; (3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋... 阅读详情

相关推荐

树、森林与二叉树的转换以及树和森林的遍历

一:关于树,二叉树,森林的概念和区别可参考 (1)https://blog.youkuaiyun.com/qq_38158479/article/details/104100460 (2)https://blog.youkuaiyun.com/qq_38158479/article/details/104101826 二:树转换为二叉树 由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左...

qq_38158479的博客 939

树、森林与二叉树的相互转换

文章目录树转换为二叉树 树转换为二叉树  二叉树和树都可以用二叉链表作为存储结构,因此二叉链表可以导出树与二叉树的一个对应关系,即给定一棵树,可以找到唯一的一棵二叉树与之对应。其中树的二叉链表存储详情可参照树的存储结构及详细完整代码。  树转换成二叉树的规则:  <1>每个结点的左指针指向它的第一个孩子结点;  <2>每个结点的右指针指向它在树中的相邻兄弟结点。  可表示为"左孩子右兄弟"。 ...

薛定谔的猫的博客 2万+

DaVinci Configurator实战:从DBC导入到通信栈配置全解析

本文详细解析了如何使用Vector DaVinci Configurator工具,从导入行业标准DBC文件开始,高效完成AutoSAR通信栈(包括COM、PduR、CanIf等模块)的自动化与精细化配置。文章通过实战步骤,重点阐述了DBC导入、与EB MCAL协同、核心模块参数调整及诊断标定服务集成等关键环节,旨在帮助汽车电子工程师快速掌握这一核心工具,提升开发效率与准确性。

weixin_29159127的博客 592

数据结构——简单实现森林转化为二叉树

先实现二叉树,再实现森林,希望给出更好的方法

weixin_46096297的博客 1万+

智能车图像处理去畸变+逆透视教程

图像处理,去畸变与逆透视整合

wu58430的博客 1万+

望获实时Linux与国产芯片协同:打造LinuxCNC数控机床的全栈国产化方案

本文探讨了如何通过望获实时Linux与飞腾、龙芯等国产芯片的深度协同,为LinuxCNC数控机床打造全栈国产化方案。望获实时Linux通过中断隔离等核心技术,提供亚微秒级确定性响应,解决了传统Linux系统实时性不足的痛点,使LinuxCNC得以稳定驱动高精度机床。该方案实现了从硬件、操作系统到应用软件的全栈自主可控,为工业控制领域提供了高性能、可定制的国产化选择。

weixin_29291069的博客 648

树和二叉树,完美/满二叉树和完全二叉树之间的区别对比

首先说树和二叉树: 一、性质不同 树:树是一种bai数据结du构。 二叉树:二叉树是每个结点最多有两个zhi子树的一种树结构dao。 二、结点不同 树:树的每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点。 二叉树:每个结点最多有两个子树。 三、种类不同 树:树的种类包括无序树、有序树、二叉树和霍夫曼树等。 二叉树:二叉树的种类包括完全二叉树、满二叉树和平衡二叉树。 完美/满二叉树和完全二叉树: 满二叉树和完全二叉树的区别: 完全二叉zhi树

自己的选择,无论是否正确,请坚持下去,黎明就在下一刻。 7311

±10V ADC 输入电路的高共模差分输入电压

这篇文章分析了±10V ADC输入电路的设计需求与挑战,重点讨论了高共模差分输入电压的处理方案。文章首先明确了设计目标,即安全转换±10V差分信号并保持信号完整性,同时克服高共模电压、阻抗匹配和噪声优化等难点。随后详细比较了仪表放大器和差分放大器的性能特点,并提出了器件选型理论。在信号链架构部分,文章通过公式推导阐述了增益设置、共模抑制设计和输入阻抗匹配等关键技术。此外,还建立了噪声源模型,提出了噪声优化措施。最后,文章总结了设计验证方法,并扩展了在工业保护和生物电信号采集等场景的应用。该设计强调根据具体应

泛红尘的博客 1959

树、森林与二叉树的转换

1.加线,将双亲和左孩子的右孩子,右孩子的右孩子,右孩子的右孩子的右孩子..相连。当所有二叉树连起来后,此时所得到的二叉树就是由森林转换得到的二叉树。依次把后一棵二叉树的根结点作为前一棵二又树根结点的右孩子。1.前序(根)遍历前序遍历森林即为前序遍历森林中的。2.后序(根)遍历后序遍历森林即为后序遍历森林中的。2.保留双亲与第一个孩子连线,删去与其他孩子的连线。可以发现树的后序遍历和转化后二叉树的中序遍历相等。可以发现树和转化后的二叉树的前序遍历相等。2.去线,将所有双亲和右孩子的连线。...

m0_63223213的博客 3054

为Skill开发的python脚本一些经验

其中SKILL.md的职责是调度,不是实现,这里面要写清楚如下三点: 脚本会自动生成: 如果缺少依赖: 这样就实现了分工,脚本用来完成格式转换、统计计算、文件生成;Claude做理解用户意图、选择参数、解释结果、处理特殊需求等。Claude 调用脚本时,所有参数都通过命令行传递,本质上都是字符串。但在脚本内部,应该明确转换成正确类型,而不是全程当字符串用。因此,强烈建议使用argparse里声明正确的type,如下: 的 参数会自动做转换和报错,比在代码里手动 更安全,报错信息也更清晰。特别注意如下

Criss@陈磊 846

【Qwen2微调实战】LLaMA-Factory框架对Qwen2-7B模型的微调实践

在人工智能的浪潮中,大型语言模型(LLMs)正逐渐成为研究和应用的热点。它们在自然语言处理(NLP)的各个领域,如文本生成、翻译、问答等任务中展现出了卓越的能力。Qwen2-7B模型,作为该领域的佼佼者,不仅因其庞大的参数量和强大的表示能力受到关注,更因其在微调后能够更好地适应特定任务而备受关注。本文将详细介绍如何利用LLaMA-Factory这一高效的微调框架对Qwen2-7B进行微调,以期达到提升模型在特定任务上的表现。

寻道AI,探索AI无限可能! 2万+

树和二叉树的转换代码python_Python - 将n-ary树转换为二叉树

class Tree:def __init__(self, new_key):self.__key = new_key # Root key valueself.__children = [] # List of childrenself.__num_of_descendants = 0 # Number of Descendants of this node# Prints the...

weixin_28864485的博客 1028

电子元器件-三极管终终篇:三极管工作原理详解、参数/手册详解、开关应用详解、Ib电流研究、开关应用实例

三极管工作原理与应用摘要 三极管是一种电流控制器件,通过小基极电流控制大集电极电流。其内部结构由高掺杂发射区、薄低掺杂基区和中等掺杂集电区组成,形成NPN或PNP结。三极管有三种工作状态: 截止区:发射结和集电结均反偏,无放大作用 放大区:发射结正偏,集电结反偏,Ic=βIb 饱和区:两结均正偏,Ic不再随Ib增大 作为开关使用时,需确保三极管深度饱和(Vce≈0.2V)。设计要点包括: 基极电阻计算确保Ib足够大 集电极电阻控制Ic 基极加下拉电阻提高抗干扰 NPN管作地开关,PNP管作电源开关 典型应用

qq_60226558的博客 313

树、森林与二叉树的转换,森林的遍历

树、森林与二叉树的转换 从树的孩子兄弟表示法和二叉树的二叉链表示法可以看出,树的孩子兄弟表示法实质上是二叉树的二叉链表存储形式,第一个孩子指针和有兄弟指针分别相当于二叉链表的左孩子指针和右孩子指针。所以从物理结构上看,树的右孩子兄弟表示法和二叉树的二叉链表是相同的,只是解释不同。如 树转换为二叉树 将一棵树转换为二叉树的方法是: 加线——树中所有相邻兄弟之间加一条线 去线——对树中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其他孩子之间的连线 层次调整——以根结点为中心,将树顺时针转动一定的

HMT的博客 2780

Diffusion Models扩散模型与深度学习(数学原理和代码解读)

​ 此前GANs霸占各大顶会很多年,DDPM的出现让人耳目一新!经过这两年的发展,Diffusion Models能在图像生成、超分辨率重建、点云生成、语音生成等领域达到SOTA。这篇文章旨在帮助没有了解过的读者入门,《Diffusion Models与深度学习专栏》已经写了将近三十篇文章,既有原理公式和必备基础知识的讲解,也有代码详细实战解读,还有前沿热门应用,欢迎读者订阅。

沉迷单车的追风少年 4万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

树、森林与二叉树的相互转换和遍历

本文章主要是介绍树、森林和二叉树的相互转化和遍历。在介绍之前,首先会介绍树的一种存储结构二叉链表法,又叫孩子兄弟表示法。提示:以下是本篇文章正文内容,下面案例可供参考以上就是本文全部的内容了,本文仅仅简单粗略的介绍了树的一种存储结构——二叉链表法(孩子兄弟法)、树与二叉树的相互转换、森林与二叉树的相互转换以及树和森林的遍历方法。

qq_63908084的博客 1325

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

树,森林,二叉树之间的转换以及 树,森林的遍历

普通树 树转换为二叉树 1.树中的所有的兄弟节点之间加上一条线 2.对每个节点,除了保留与其长子的连线外,去掉该节点与其他孩子的连线。 将下图普通的树,转换为二叉树 1.树中的所有的兄弟节点之间加上一条线 2.对每个节点,除了保留与其长子的连线外,去掉该节点与其他孩子的连线。 经过简单转变: 森林转换为二叉树 1.现将森林中的每颗树转换为二叉树 2.再将各个二叉树的根节点视为兄弟从左...

qq_38304320的博客 1328

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

二叉树、树和森林的遍历和转换

一 遍历 (1)二叉树的遍历: 遍历方式:先序、中序、后序和层次(熟记:三个递归算法+三个非递归算法+层次遍历算法) 时间复杂度:遍历二叉树的算法中的基本操作都是访问节点,且不论按哪一种次序进行遍历,对含有n个结点的二叉树,其时间复杂度为O(n)。 空间复杂度:为遍历过程中栈的最大容量,即树的深度,最坏情况下为n,则空间复杂度为O(n)。 (2)树的遍历: 树有两种次序

linux系统、网络编程和分布式计算 2887

为什么森林没有后序遍历_树、二叉树与森林之间的相互转换

小禹禹们,你们好呀,之前景禹跟大家已经谈了树、二叉树的一些基础概念并进行了动画演示,今天主要介绍一下考试中常出现的树、二叉树和森林之间的相互转化问题。普通树转换为二叉树步骤如下:1. 加线,在所有兄弟结点之间加一条连线。2. 去线,对树中每个结点,只保留它与第一孩子结点的连线,删除它与其他孩子结点之间的连线。3. 层次调整,以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分...

weixin_39853131的博客 3093

树、森林与二叉树的转换详解,树和森林的遍历详解

数据结构,树、森林与二叉树的转换详解,树和森林的遍历详解。

weixin_45651616的博客 2821

众树成森——森林与二叉树的转换、树与二叉树的转换、树和森林的遍历

树与二叉树的转换 将树转化为二叉树进行处理,利用二叉树的算法来实现对树的操作。 由于树和二叉树都可以用二叉链表作存储结构,则 以二叉链表作媒介可以导出树与二叉树之间的一个对应关系。 由下图我们可以发现树和二叉树都可以相同的存储结构表示 树????二叉树 ①加线:在兄弟之间加一连线 ②抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系 ③旋转:以树的根结点为轴心,将整树顺时针转45° 树...

diviner_s的博客 710

树森林二叉树的相互转换及遍历树与森林

森林 与 树 与 二叉树 将树转换为二叉树的步骤 1.加线 在所有兄弟结点之间加一条连线 2.去线 对树中的每个结点,只保留与他第一个孩子结点的连线删除它与其它孩子结点之间>的连线. 3.层次调整,以树的根节点为轴心,将整棵树顺时针旋转一定的角度使之结构分明,注意第一 个孩子是二叉树结点的左孩子,兄弟转换过来的孩子是结点的右孩子. 森林是由若干棵树的组成,所以可以理解为森林中...

qq_43735092的博客 629

树/二叉树/森林之间的相互转换 与遍历

因为根结点没有兄弟,所以它仅有左孩子,所以从二叉树的左结点入手,找左结点的全部右兄弟,使它们连接到左结点的parent结点(下图虚线所示),然后断开兄弟之间的连线(打叉叉的地方),然后再从第一个兄弟的左结点继续往下找,依次。森林总结点数为m,即二叉树的总结点数也是m, 根p的右子树结点数有n个,我们根据森林转二叉树规则知道根结点的右子树都是由森林中其它树构成的,既然右子树结点n,也就是除了第一棵树外总的结点数n,所以第一棵树就有m-n个结点。如果是无序树,EF的位置就可以对换,还是同一棵无序树。

whiteBearClimb的博客 1952

【数据结构】树和森林(树和森林的存储结构、树森林二叉树的转换、树和森林的遍历

基于孩子兄弟表示法:如果当前处理的结点在树中有孩子,就把所有孩子结点“用右指针串成糖葫芦”,并在二叉树中把第一个孩子挂在当前结点的左指针下方。如何恢复一个结点的孩子:在二叉树中,如果当前处理的结点有左孩子,就把左孩子和“一整串右指针糖葫芦”拆下来,按顺序挂在当前结点下方。如何恢复一个结点的孩子:在二叉树中,如果当前处理的孩子有左孩子,就把左孩子和“一整串右指针糖葫芦”拆下来,按顺序挂在当前结点下方。2.从树的根结点开始,按树的层序恢复每个结点的孩子。∴适用于找孩子多,找父亲少的场景,如:服务流程树。

m0_61628700的博客 1299

树与二叉树的转换、森林与二叉树的转换、树和森林的遍历

文章目录将树转换成二叉树将二叉树转换成树将森林转换成二叉树将二叉树转换成森林树的遍历森林的遍历 由于树和二叉树都可以用二叉链表作存储结构,则以二叉链表作媒介可以导出树与二叉树之间的一个对应关系 将树转换成二叉树 ①加线:在兄弟之间加一连线 ②抹线:对每个结点,除了其左孩子外,去除其与其余孩子之间的关系 ③旋转:以树的根结点为轴心,将整树顺时针转45° 巧记:兄弟相连留长子 将二叉树转换成树 ①...

wmy0217_的博客 3543
上一篇: 线索二叉树
下一篇: Python操作excel(xlrd和xlwt)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值