树,森林,二叉树的互相转换

树、森林到二叉树的转换

将树转换为二叉树
树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。按照这种关系很自然地就将树转换成相应的二叉树:

  • 在所有兄弟结点之间加一连线
  • 对每个结点,除了保留与其长子的连线外,去掉该结点与其他孩子的连线

下面(a)图所示的树可转换为©图所示的二叉树。

在这里插入图片描述

由于树根没有兄弟,故树转化为二叉树后,二叉树的根结点的右子树必为空。

将一个森林转换为二叉树

  • 将森林中的每棵树变为二叉树
  • 因为转换所得的二叉树的根节点的右子树均为空,故可将各二叉树的根节点视为兄弟从左至右连在一起,就形成了一棵二叉树

下图中,左边包含三棵树的森林可转换为右边的二叉树。

在这里插入图片描述

二叉树到树、森林的转换

把二叉树转换到树和森林的方式是:若结点x是双亲y的左孩子,则把x的右孩子,右孩子的右孩子,…,都与y用连线连起来,最后去掉所有双亲到右孩子的连线

下图的森林就是由例2中二叉树转换成的。

在这里插入图片描述例题

将森林转换为对应的二叉树,若在二叉树中,结点u是结点v的父结点的父结点,则在原来的森林中,u和v可能具有的关系是:
1.父子关系; 2. 兄弟关系; 3. u的父结点与v的父结点是兄弟关系A.只有2
B.12
C.13
D.123

B
解析:
1.父子关系成立
在这里插入图片描述
2.兄弟关系成立
在这里插入图片描述3.u的父节点与v的父节点是兄弟关系不成立

  • 将森林转换为二叉树的第一步是将每棵树转变为二叉树:则第一步是在所有兄弟结点之间加一根线,第二步对每个结点,除保留与长子的连线,去掉该结点与其他孩子的连线;则若u父亲与v父亲是兄弟关系,必连线成为父子,由此u至多为v的父亲的兄弟

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

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

相关文章

数据丢失引起宕机怎么办?

做过系统开发和运维的朋友,应该最怕数据丢失问题出现,更严重的是造成无法恢复的糟糕境地,简直叫人崩溃啊,这周有一个朋友跟我咨询这方面的事情,就整理了一下数据库自动异地备份的方法,分享给大家。大家都知…

python字典(Dict)

字典的创建 字典的访问(List转换) 字典的遍历 字典的添加 字典的合并 字典的删除(清空) 字典的其他操作 字符串转字典(eval) 字典的创建 dict1{"A":1,"B":2,"C":99} //直接…

ASP.NET Core跨平台技术内幕

ASP.NET Core设计初衷是开源跨平台、高性能Web服务器,其中跨平台特性较早期ASP.NET是一个显著的飞跃,.NET现可以理直气壮与JAVA同台竞技,而ASP.NET Core的高性能特性更是成为致胜法宝。ASP.NET Core 2.1为IIS托管新增In-Process模型并作为默认…

6-23 分离链接法的删除操作函数 (20 分)

试实现分离链接法的删除操作函数。 函数接口定义: bool Delete( HashTable H, ElementType Key );其中HashTable是分离链接散列表,定义如下: typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typed…

使用 Visual Studio Code 进行远程开发

在完成了 AT 指令入门的学习之后,接下来就要使用 AT 指令进行 Socket 通信了。问题在于,之前 .NET 的 Socket 编程只需一台电脑便可进行学习,服务器和客户端都可以在本机运行,也可以分别运行在局域网上的两台电脑之上。而 NB-IOT …

AI人工智能

1,为什么要对特征做归一化? 2,什么是组合特征?如何处理高维组合特征? 3,请比较欧式距离与曼哈顿距离? 4,为什么一些场景中使用余弦相似度而不是欧式距离? 5,O…

python练习题

一、 请编写程序,使得能够计算以下算术运算并打印结果:9的3次方 print(9**3)二、 给你一个整数,代表Tom的妈妈买的书本的数量,输出一段英文,能完整表述Tom的妈妈买了几本书。本题考查字符串的组合、数据类型的变换、变…

.NETCore3.1中的Json互操作最全解读-收藏级

前言本文比较长,我建议大家先点赞、收藏后慢慢阅读,点赞再看,形成习惯!我很高兴,.NETCore终于来到了3.1LTS版本,并且将支持3年,我们也准备让部分业务迁移到3.1上面,不过很快我们就遇到了新的问题…

在一个数组中实现两个堆栈

6-11 在一个数组中实现两个堆栈 (20 分) 本题要求在一个数组中实现两个堆栈。 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag );其中Tag是堆栈编号,取1或2&…

逻辑结构的四种基本关系

逻辑结构的四种基本关系 1集合结构:数据元素之间除了“属于同一集合”的关系外,没有其他关系 2线性结构:数据元素之间存在一对一的关系 3树结构:数据元素之间存在一对多的关系 4图结构:数据元素之间存在多对多的关系

轻量级开源小程序SDK发车啦

Magicodes.WxMiniProgram.Sdk轻量级微信小程序SDK,支持.NET Framework以及.NET Core。目前已提供Abp模块的封装,支持开箱即用。地址:https://github.com/xin-lai/Magicodes.WxMiniProgram.SdkNuget新的包主要功能轻量级微信小程序SDK&#xf…

单链表基础知识详解

//通常使用结构的嵌套来定义单向链表结点的数据类型 typedef struct Node *PtrToNode;//将Node命名为PtrToNode struct Node {ElementType Data;//存储结点数据PtrToNode Next;//指向下一个结点的指针 }; //结构类型Node中的Next分量又是该结构类型的指针&#xff0…

[译文] C# 8 已成旧闻, 向前, 抵达 C# 9!

C# 8 is old news. Onward, to C# 9! (C# 8 已成旧闻, 向前, 抵达 C# 9!)Did you know that planning is already underway for the ninth version of the C# language?第九版 C# 语言已经在开发中了, 你晓得伐?Now, to be fair, this has been in the planning phases long,…

考察对顺序表的理解

顺序表是在计算机内存中以数组的形式保存的线性表 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻…

2020年你应该学习 .Net Core

一、什么是.NET Core.NET Core是一个开源通用的开发框架,支持跨平台,即支持在Window,macOS,Linux等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用。.NET Core的…

对表头指针、表头结点,单链表删除的理解

https://blog.csdn.net/weixin_46678290/article/details/105309156

C# WPF发票打印

C# WPF发票打印内容目录实现效果业务场景编码实现本文参考源码下载1.实现效果发票界面PDF打印结果2.业务场景界面作为发票预览,按客户需求可打印成发票纸张给客户。3.编码实现3.1 添加Nuget库站长使用 .Net Core 3.1 创建的WPF工程,创建“Invoice”解决方…

对全局变量,static静态变量的理解

如果所有的变量按照下面的程序进行定义和声明,那么在main()函数中所有可用的变量为 ()。 void fun(int x) {static int y;……return; } int z; void main( ) {int a,b;fun(a);…… }A.x,y B.x,y,z C.a,b,z D.a,b,x,y,z static静态变量的值在…

dotNET知音,19年归档

2019年下半年开通公众号,尝试着分享和技术交流,也很高兴认识很多NETer同行。为了方便阅读,进行归档,如果之前有错过的文章,这是一个很好的补课机会。.NETCore3.0:《.Net Core3.0 配置Configuration》《.Net…

顺序表和链表的优缺点理解

若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用哪种存储方式最节省时间?D A.双链表 B.单循环链表 C.带头结点的双循环链表 D.顺序表 想要存取任一指定序号的元素,链表实现这个功能的代价很大 本来顺序表的…