树【二叉树】与森林的相互转化与遍历

news2024/9/24 7:26:16

一、树与森林的相互转换

预备知识:孩子兄弟表示法。

代码编写出来:

typedef struct CSNode{
	int data;
	struct CSNode *firstchild,*nextS;
}CSNode;

 解释:该结点的链域分别指向它的第一个孩子和它同级的兄弟。

(一)森林转换成树

step1:将森林里面的树转化为二叉树。(用孩子兄弟表示法)

如图:

 step2:把这片转化后的森林再用一次孩子兄弟表示法表示成一颗大的二叉树。【这颗最终的二叉树是以A作为根结点的】

如图: 

 (二)二叉树转换成森林

因为之前的森林我们已经知道是用孩子兄弟表示法做出来的,所以每个结点的右链指向的都是同一级的兄弟。

step1:

断掉这个二叉树的右链,它根结点所在的那一脉是森林中的树。【注意:因为A是这颗二叉树的根结点,所以A的右链都是与它同级森林的根结点】

如图:

 step2:把断掉的右节点连到它兄弟的双亲上,(这也是它的双亲)

如图:

二、遍历

树,二叉树,森林各种遍历总结:

树的前序遍历,对应二叉树的前序遍历。
树的后序遍历,对应二叉树的中序遍历。
树的层次遍历,对应二叉树的后序遍历。

森林的前序遍历,对应二叉树的前序遍历。
森林的中序遍历,对应二叉树的中序遍历。

 

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

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

相关文章

【场景方案】我所遇到的有关前端文件上传的知识点归纳,欢迎大家来补充

文章目录 前言前后端传输的文件格式主要有哪些base64formData 前端上传方案input标签获取文件HTML5的API 切片上传大文件blob数据转成base64未来不间断补充 前言 本文章总结了本人在网上和实际公司项目中遇到的有关前端文件上传功能的知识点,如有更好的方案或者发现…

【Windows】【Audio】Windows 11 声音配置

目录 一. 问题 二. 步骤 三. 配置 3.1 候选列表 3.2 程序事件 3.2.1 Windows 3.2.2 文件资源管理器 3.2.3 Windows 语音识别 一. 问题 印象中记得 Windows XP 启动和关机,还有平常点击的过程中有声音来着,Windows 11 咋没有? 折腾了折…

智能优化算法:浣熊优化算法-附代码

智能优化算法:浣熊优化算法 文章目录 智能优化算法:浣熊优化算法1.浣熊优化算法1.1 初始化1.2 阶段一:狩猎和攻击(探索阶段) 2.实验结果3.参考文献4. Matlab 摘要:浣熊优化算法(Coati Optimizat…

Mysql的可重复读解决了幻读问题吗

针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据&…

开关电源基础02:基本开关电源拓扑(3)-拓扑分析

说在开头:关于薛定谔的波动方程(1) 当年毛头小子海森堡在哥廷根求学的时候,埃尔文.薛定谔已经是瑞士苏黎世大学的著名教授了。跟其他那些小天才(定位精度:25岁5岁)相比,薛定谔只能用…

使用 Python 查找本月的最后一天

文章目录 使用 Python 中的日历库查找月份的最后一天使用 Python 中的 DateTime 模块查找该月的最后一天从每个月的第一天减去一天以找到该月的最后一天使用存储在数组中的预加载日期使用 for 循环查找该月的最后一天打印日历年所有月份的最后一天以查找该月的最后一天 使用 Ar…

Kafka生产者原理

消息发送流程介绍 Producer创建时,会创建⼀个sender线程并设置为守护线程。⽣产消息时,内部其实是异步的;⽣产的消息先经过拦截器->序列化器->分区器,然后将消息缓存在缓冲区(该缓冲区也是在Producer创建时创建…

关于clash退出后,华硕电脑连不上网了

关于clash退出后,华硕电脑连不上网了 问题记录 问题记录 昨天因为overleaf老断网,然后我就挂了一下clash(第一次用,不怎么懂),后来直接关闭退出了。 今天早上突然浏览器的网页(微软自带、华硕…

挑战14天学完Python----初识Python语法

往期文章 Java继承与组合 你知道为什么会划分数据类型吗?—JAVA数据类型与变量 10 > 20 && 10 / 0 0等于串联小灯泡?—JAVA运算符 你真的知道怎样用java敲出Hello World吗?—初识JAVA 目录 往期文章前言1.温度转换实例2. 程序格式框架2.1 高…

ATT汇编快速学习

说明 文档来源 https://flint.cs.yale.edu/cs421/papers/x86-asm/asm.html 使用AT&T语法; 原文档是intel语法翻译过来的; 内容 基于32位, x86的硬件环境; 指令仅仅介绍常用, 即还有很大一部分的指令并没有支持; 编译器(汇编器) GAS(GNU assembler: 即gnu组织提供; 使…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 5 Link Analysis

来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 5 Link Analysis Terms: words or other strings of characters other than white space. An inverted index is a data structure that makes it easy, given a term, to find (pointers to) a…

【数码】收音机,德生PL380使用教程与注意事项

文章目录 1、主界面功能介绍(注意闹钟和自动关机)2、电池和电池模式的匹配3、收音机天线与信号,耳机与噪音F、参考资料 1、主界面功能介绍(注意闹钟和自动关机) 红色的按钮:power 按一下开机,按…

DJYOS开源往事一:djyos爱好者大南山相聚写实

前言:DJYOS开源社区成立于2009年,后因为专注技术方向和垂直产业化等原因,2015年后关闭开源社区。斗转星移,DJYOS开源社区虽然关闭,但是DJYOS开源和精神依然在,转眼DJYOS发布十四年了。记录一下DJYOS开源往事…

Qt Plugin插件开发

一、Qt 插件机制 .1 Qt 插件简介 插件是一种遵循一定规范的应用程序接口编写出来的程序,定位于开发实现应用软件平台不具备的功能的程序。插件与宿主程序之间通过接口联系,就像硬件插卡一样,可以被随时删除,插入和修改&#xff…

2.2.4 Linux安装模式下,磁盘分区的选择(重要)

目录树结构 (directory tree) 整个Linux系统最重要的地方就是在于目录树架构。 所谓的目录树架构(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种文件架构。 所以,整个目录树架构最重…

Midjourney-Discord入门+高手指引手册

上一篇我们说了如何注册和订阅,今天我们来讲一讲相关的细节,首先我们来一个概览图,先有个大致的印象。 概览图 生成的四张图片,类似于Demo,从左至右,从上至下,1,2,3,4放大按钮U1,U2…

【旋转编码器如何工作以及如何将其与Arduino一起使用】

在本教程中,我们将学习旋转编码器的工作原理以及如何将其与Arduino一起使用。您可以观看以下视频或阅读下面的书面教程。 1. 概述 旋转编码器是一种位置传感器,用于确定旋转轴的角度位置。它根据旋转运动产生模拟或数字电信号。 有许多不同类型的旋转编码器按输出信号或传感…

三个令人惊艳超有用的 ChatGPT 项目,开源了!

自 3 月初 Open AI 开放 ChatGPT API 以来,GitHub 上诞生的开源项目数量之多,着实多得让我眼花缭乱、应接不暇。 今天,我将着重挑选几个对日常工作、生活、学习帮助较大的 ChatGPT 开源项目,跟大家分享下,希望对你有所…

Illustrator如何使用填充与线条之实例演示?

文章目录 0.引言1.绘制星空小插画2.制作清新小碎花壁纸3.双重描边文字 0.引言 因科研等多场景需要进行绘图处理,笔者对Illustrator进行了学习,本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结,本文对…

labelme标注数据集,并利用paddleseg完成标注数据的准备工作

1、安装labelme 1、创建labelme虚拟环境 先检查python的版本 python -V使用命令 conda create -n labelme python=3.9,创建虚拟环境 2、激活虚拟环境 conda activate labelme3、安装labelme pip install labelme2、labelme的使用 1、打开cmd输入命令 labelme2、进入label…