树、森林与二叉树相互转化

2023-11-17

1、树转换为二叉树

由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。

将树转换成二叉树的步骤是:
(1)加线。就是在所有兄弟结点之间加一条连线;
(2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线;
(3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。



树转换为二叉树的过程示意图


2、森林转换为二叉树

森林是由若干棵树组成,可以将森林中的每棵树的根结点看作是兄弟,由于每棵树都可以转换为二叉树,所以森林也可以转换为二叉树。

将森林转换为二叉树的步骤是:
(1)先把每棵树转换为二叉树;
(2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子结点,用线连接起来。当所有的二叉树连接起来后得到的二叉树就是由森林转换得到的二叉树。


森林转换为二叉树的转换过程示意图


3、二叉树转换为树

二叉树转换为树是树转换为二叉树的逆过程,其步骤是:
(1)若某结点的左孩子结点存在,将左孩子结点的右孩子结点、右孩子结点的右孩子结点……都作为该结点的孩子结点,将该结点与这些右孩子结点用线连接起来;
(2)删除原二叉树中所有结点与其右孩子结点的连线;
(3)整理(1)和(2)两步得到的树,使之结构层次分明。



二叉树转换为树的过程示意图


4、二叉树转换为森林

二叉树转换为森林比较简单,其步骤如下:
(1)先把每个结点与右孩子结点的连线删除,得到分离的二叉树;
(2)把分离后的每棵二叉树转换为树;
(3)整理第(2)步得到的树,使之规范,这样得到森林。

根据树与二叉树的转换关系以及二叉树的遍历定义可以推知,树的先序遍历与其转换的相应的二叉树的先序遍历的结果序列相同;树的后序遍历与其转换的二叉树的中序遍历的结果序列相同;树的层序遍历与其转换的二叉树的后序遍历的结果序列相同。由森林与二叉树的转换关系以及森林与二叉树的遍历定义可知,森林的先序遍历和中序遍历与所转换得到的二叉树的先序遍历和中序遍历的结果序列相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树、森林与二叉树相互转化 的相关文章

  • iOS开发:使用大图+脚本,生成各种size的app icon和图片素材

    美术UI在公司是宝贵的资源 集各种项目宠爱于一身 为了努力完成好老板的进度需求 不给UI添麻烦 程序员开始忙活了 在iOS里面 我们使用image assert来管理素材和app icon 为什么呢 因为方便 按照image assert要
  • 怎样在前端遍历后端服务器传递来的json字符串中的集合?

    怎样在前端遍历后端服务器传递来的json字符串中的集合 后端把一个List类型的集合先转换成json字符串然后返回给通过ajax返回给前端 如下图 后端服务器中的代码如下图 紧着着前端页面遍历 后端传递来的json字符串中的集合数据 先来看
  • 读论文(二) - BERT

    Introduction 预训练的语言模型 在改进自然语言处理任务方面非常有效 包括句子级别的任务 自然语言推理和释义 也包括分词级别的任务 NER和问答 将预训练的语言表示应用于下游任务有两种现有策略 基于特征 feature based
  • 循环神经网络(RNN)的基本原理及LSTM的基本结构

    来源于课上实验 结果清晰 遂上传于此 实验环境TensorFlow1 14 该课件仅用于教学 请勿用于其他用途 详细参考 实验笔记 实验视频 一 实验目的 学习掌握循环神经网络 RNN 的基本原理及LSTM的基本结构 掌握利用LSTM神经元
  • vulfocus靶场安装教程

    背景 漏洞把场是目前每个安全人员以及想学习信息安全的人必备的东西 但目前商业化产品居多 还有一些类似dwwa sqlilabs这类的开源项目 但是漏洞环境比较固定 使用完一次后就失去其作用 搭建的成本过高 每次启动的流程会比较繁锁 甚至很多
  • 【react】对state的理解

    state是类创建的实例对象上的一个状态属性 想要改变类的实例对象的值 就要用到构造器 但由于类组件都是继承的React内置的Component类 继承的类 要写构造器的话 就必须写super 改变state this state xxx
  • TIP Spring-boot健康检查查看详细信息

    Spring boot提供了健康检查的手段 定期检查应用各个组件的状态 并提供了一些通用组件的检查 比如MySQL Redis等 可以使用下面的命令查看应用的健康状态 curl localhost port health 如果应用有异常 会
  • GhostNetV2学习笔记

    GhostNetV2学习笔记 GhostNetV2 Enhance Cheap Operation with Long Range Attention Abstract 轻量级卷积神经网络 CNNs 是专为在移动设备上具有较快推理速度的应用
  • Deployment Controller 典型使用场景

    1 重新调度 Rescheduling 不管想运行 1 个副本还是 1000 个副本 副本控制器都能确保指定数量的副本存在于集群中 即使发生节点故障或 Pod 副本被终止运行等意外状况 2 弹性伸缩 Scaling 手动或者通过自动扩容代理
  • 【科普】CRC校验(一)什么是CRC校验?

    目录 CRC 循环冗余校验 CRC 校验码的生成 CRC 的发送方与接收方 发送方 接收方 除法异或运算示意图 CRC 循环冗余校验 CRC Cyclic Redundancy Check 循环冗余检验 是一种用于检测数字数据错误的技术 作
  • 不用JS,教你只用纯HTML做出几个实用网页效果

    转载请注明出处 葡萄城官网 葡萄城为开发者提供专业的开发工具 解决方案和服务 赋能开发者 原文出处 https blog bitsrc io pure html widgets for your web application c90155
  • Python - 遍历列表

    方法1 for循环直接遍历 lists m1 1900 m2 2000 for item in lists print item 注 同JAVA中的foreach循环一样 用for循环遍历列表 并不能改变列表中的数据项的值 lists m1
  • 校验密码复杂度(规则:长度8-30,必须包含数字、字母、特殊符号)、校验用户名(规则:长度4-19,包含数字、字母,不包含特殊字符)

    校验密码复杂度 规则 长度8 30 必须包含数字 字母 特殊符号 校验用户名 规则 长度4 19 包含数字 字母 不包含特殊字符
  • RHEL8网络管理

    RHEL8网络管理服务 NetworkManager早期的设计目的是为了统一网络配置 表示以后所有的网络相关的配置都使用NetworkManager来实现 NetworkManager服务提供了3种工具用来配置网卡参数 都不需要去手动修改网
  • 【每日多题之贪心】

    文章目录 1 分割平衡字符串 1 1 题目描述 1 2 题目分析 1 3 代码实现 2 最少操作数使数组递增 2 1 题目描述 2 2 题目分析 2 3 代码实现 3 卡车上的最大单元数 3 1 题目描述 3 2 题目分析 3 3 代码实现
  • 使用UML编写Java应用程序

    引言 统一建模语言 Unified Modeling Language 简写为UML 是一种通用的模拟语言 它可以用于确定 展示和记录软件系统的设计过程 统一建模语言中的图形标记 尤其是用于面向对象的软件设计 它有两大优点 1 UML是国际
  • iframe添加loading效果

    问题 当一个页面嵌入iframe时 iframe加载会有延迟 即在iframe元素展现前 嵌入iframe的父页面会有一段白屏情况 用户感知不到iframe页面在加载 体验效果不是很好 解决方法 为了提升用户体验 让用户感知到当前页面在加载
  • FISCO BCOS离线搭建单机单群组4节点

    系列文章目录 第一章 FISCO BCOS在线搭建单机单群组4节点 文章目录 系列文章目录 前言 一 安装准备 1 安装依赖包 2 创建操作目录 3 下载脚本 三 搭建单群组4节点联盟链 1 暂停并清除FISCO BCOS 2 搭建区块链
  • Python实战

    逆向完美世界登录 js代码调试阶段 1 查看密码关键字段 2 Ctrl shift f全局搜索 password 找到相关js文件 3 从代码的setpublickey encrypt关键字可以看出 使用了非对称加密算法 4 此处打断点 再
  • ubuntu 使用FFTW快速计算离散傅里叶变换

    FFTW the Faster Fourier Transform in the West 是一个快速计算离散傅里叶变换的标准C语言程序集 其由MIT的M Frigo 和S Johnson 开发 可计算一维或多维实和复数据以及任意规模的DF

随机推荐

  • 解决Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题

    解决Xilinx ISE 14 7在Win10下选择 open project 崩溃闪退的问题 问题描述 ISE 14 7对win10无法完美支持 在使用64位ISE时点击OPEN之类的东西时程序都会崩溃 虽然使用32位不会有这个问题 但是
  • nvidia-docker容器迁移导致GPU启动失败解决方案

    引言 起因是最近发现一个很有趣的问题 当我的docker容器迁移到另一台服务器去 因为GPU版本不一致导致项目启动是会报错为 CUDA error CUDA ERROR NO DEVICE no CUDA capable device is
  • Python爬虫如何获取页面内所有URL链接?本文详解

    如何获取一个页面内所有URL链接 在Python中可以使用urllib对网页进行爬取 然后利用Beautiful Soup对爬取的页面进行解析 提取出所有的URL 什么是Beautiful Soup Beautiful Soup提供一些简单
  • mxnet.ndarray.slice_axis 沿给定轴切片

    mxnet ndarray slice axis data None axis Null begin Null end Null out None name None kwargs 作用 沿给定轴切片 返回沿给定轴从开始索引到结束索引的数组
  • 论文笔记-2019-Object Detection in 20 Years: A Survey

    Object Detection in 20 Years A Survey Zhengxia Zou Zhenwei Shi Member IEEE Yuhong Guo and Jieping Ye Senior Member IEEE论
  • kafkatemplate无法注入_Spring-Kafka(三)-KafkaTemplate发送消息及结果回调

    我们使用KafkaTemplate send String data 这个方法发送消息到Kafka中 显然这个方法并不能满足我们系统的需求 那我们需要查看一下KafkaTemplate所实现的接口 看看还提供了什么方法 当我们发送消息到Ka
  • WPS excel 使用 MAX() 函数为合并单元格自动填充序号编号

    在一些统计表格时会把一些内容使用合并单元格作归类 甚至需要给他们编号 每一个合并后的单元格包括的行数是不规律的 本文对不规律的单元格如何填充序号进行介绍 现有如下表格内容 需要 在 A 列 按照 B 列的功能单元格进行排序 步骤 1 如下图
  • HTML 初识

    前言 HTML的基本骨架 HTML基本骨架是构建网页的最基本的结果 指定文档类型为HTML5 表示整个HTML文档的根元素 包含了与文档相关的设置和定义 如字符编码 标题等
  • 微信支付--调起支付(整理、思路)

    小程序微信支付 小程序支付 public JSONObject minMpPay String reqBody throws Exception 第一步获取prepay id String prepayId WxPayV3Util v3Pa
  • windows线程同步 基础

    windows线程同步 基础 一 用户方式同步 同步速度非常快 互锁函数家族只能在单值上运行 根本无法使线程进入等待状态 可以使用关键代码段使线程进入等待状态 但是只能用这些代码段对单个进程中的线程实施同步 还有 使用关键代码段时 很容易陷
  • 拳王虚拟项目公社:低价电影票怎样赚钱,低价电影票实操赚钱方法

    不管是线上还是线下 资源的交换 讲究的是资源对等 尤其是资源 小白上路 往往没有什么方向感 每天不知道该干嘛 做什么行动有效果 如果看不到希望 特别磨灭一个人内心 这种痛苦是煎熬的 是难以忍受的 拳王虚拟项目公社 低价电影票怎样赚钱 低价电
  • JavaWeb知识梳理(后端部分)

    JavaWeb 静态web资源 如html 页面 指web页面中供人们浏览的数据始终是不变 动态web资源 指web页面中供人们浏览的数据是由程序产生的 不同时间点访问web页面看到的内容各不相同 静态web资源开发技术 HTML CSS
  • mysql存储过程之传递参数

    in 表示传入的参数 in 参数名1 参数类型 in 参数名2 参数类型 delimiter create procedure func in id int begin select from 表 where Id id 查询Id id的信
  • Causal Attention for Vision-Language Tasks Paper: Causal Attention for Vision-Language Tasks个人理解

    Causal Attention for Vision Language Tasks Paper Causal Attention for Vision Language Tasks 传统的视觉语言任务中 如果数据集是长尾分布的 atten
  • 研发效能提升工具插件

    一 代码工具插件 GitHub Copilot https copilot github com GitHub Copilot 是一个基于OpenAI Codex的代码生成器 作为Visual Studio Code VSCode 的扩展提
  • c语言中+ =和=+有什么区别

    点击上方蓝字关注我 了解更多咨询 c语言中 和 有什么区别 区别在于 是简写 a 1就是a a 1 并不是简写 a a直接对a的赋值 符号代表的是正负 完全可以省略不写 即a b其实就是a b 在用C 编程时 我经常混淆 和 前者实际上是我
  • 高度封装的前后端框架-odoo回顾(四):翻译官方教程<<高级B:ACL和记录规则>>

    Advanced B ACL and Record Rules 高级B ACL和记录规则 Warning 警告 This tutorial assumes you have completed the Core Training 这个教程默
  • 集成学习与深度学习 加载模型方法

    1 集成学习 import joblib joblib load model pkl 2 深度学习 用torch自带的load import torch data torch load model pkl error pickle Unpi
  • JDK8 字节码操作

    java字节码技术 1 BCEL 基于汇编 2 ASM 轻量级 3 javassist 性能比发射高 比asm低 使用简单 4 cglib 基于ASM 应用场景 1 动态修改class文件 对类进行增删改 2 aop技术 3 lombok
  • 树、森林与二叉树相互转化

    1 树转换为二叉树 由于二叉树是有序的 为了避免混淆 对于无序树 我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号 将树转换成二叉树的步骤是 1 加线 就是在所有兄弟结点之间加一条连线 2 抹线 就是对树中的每个结点 只保留他与第一