【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)

一、已知一颗二叉树如下图,试求:

(1)该二叉树前序、中序和后序遍历的结果。
(2)该二叉树是否为满二叉树?是否为完全二叉树?
(3)将它转换成对应的树或森林。
(4)这颗二叉树的深度为多少?
(5)试对该二叉树进行前序线索化。
(6)试对该二叉树极性中序线索化。

(1)
前序遍历(根左右): a->b->d->g->e->c->f->h
中序遍历(左根右): d->g->b->e->a->f->h->c
后序遍历(左右根): g->d->e->b->h->f->c->a
(2)
该二叉树不是满二叉树,也不是完全二叉树。
(3)

二叉树到树和森林的转换,步骤如下:
(1)首先将二叉树按照逆时针方向旋转45°。
(2)若某结点是其双亲的左子女,则把该结点的右子女、右子女的右子女…都与该结点的双亲用线连起来。
(3)最后去掉原二叉树中所有双亲到齐右子女的连线。

对于上面这棵树,我们首先将其旋转,将并用线连接:

然后我们删除所有双亲到其右子女的连线,也就是红色的线:

这样我们就把一颗二叉树转换成为森林了。
(4)这棵树的深度为4。
(5)对这颗二叉树进行前序线索化:

穿线二叉树
所谓穿线二叉树,即在一般二叉树的基础上,对每个结点进行考察。
若其左子树为非空,则其左指针不变,仍指向左子女;
若其左子树为空,则让其左指针指向某种遍历顺序下该结点的前驱结点;
若其右子树非空,则其右指针不变,仍指向右子女;
若其右子树为空,则让右子树指向某种遍历顺序下该节点的后继结点。

前序线索化: a->b->d->g->e->c->f->h

(6)中序线索化: d->g->b->e->a->f->h->c

二、试描述树和二叉树的主要区别

一、性质不同:树是一种数据结构,二叉树是每个结点最多有两个子树的一种树结构。
二、结点不同:树的每个结点有零个或多个子结点,二叉树每个结点最多有两个子树。
三、种类不同:树的种类包括无序树、有序树、二叉树和霍夫曼树等,二叉树的种类包括完全二叉树、满二叉树和平衡二叉树。

三、试分别画出来具有3个结点的树和具有3个结点的二叉树的所有不同形态。

这里主要考察树和二叉树的区别,树是无序的,而二叉树是有序的。
树:

二叉树:

四、已知一颗二叉树的中序遍历结果为ABCEFGHD,后序遍历结果为ABFHGEDC,试画出此二叉树。

中序遍历,即 左子树->根->右子树
后序遍历,即 左子树->右子树->根
故由此,我们首先可以根据后序遍历得知这棵树的根节点为C。

我们可以得知,左子树的结点为AB,右子树包含结点为 EFGHD。
对于左子树,中序(左根右)和后序(左右根)一样,那么可以推断A为左子树结点的左孩子,B为根。
对于右子树后序遍历结果< FHGED >我们可以得知右子树的根节点为D。确定之后,再根据前序遍历< EFGHD>可以得知< EFGH >全部为 左子树上的结点。
根据基本判断先得出:

中序< EFGH>和后序< FHGE >可以得知,< FGH>为E的右子树,然后根据后序 可以得之,G为结点。
G为子树的结点,根据中序可以得知,F为左结点,H为右结点。

五、已知一颗二叉树的前序遍历结果为ABCDEF,中序遍历的结果为CBAEDF,试画出此二叉树。

前序:根左右ABCDEF
中序:左根右CBAEDF
这个题给出前序和中序,中序其实就是将所有的结点压下去,压在同一水平线上,然后进行排序。
(前序遍历其实就是顺着结点沿着左线而下。)
根据前序,确定这棵树的根节点为A。
然后确定左子树,和右子树

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

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

相关文章

算法之双指针

双指针算法的作用 双指针算法是一种使用2个变量对线性结构(逻辑线性/物理线性)&#xff0c;进行操作的算法&#xff0c;双指针可以对线性结构进行时间复杂度优化&#xff0c;可以对空间进行记忆。 双指针算法的分类 1.快慢指针 2.滑动窗口 3.左右指针 4.前后指针 双指针OJ题目…

docker可视化

什么是portainer&#xff1f; portainer就是docker图形化界面的管理工具&#xff0c;提供一个后台面板供我们操作 目前先用portainer(先用这个)&#xff0c;以后还会用到Rancher(CI/CD在用) 1.下载portainer 9000是内网端口&#xff0c;8088是外网访问端口 docker run…

Linux文件系统(1)

Linux文件系统(1) &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容从系统层面重新认识我们的文件系统 文…

每日一题(LeetCode)----数组--长度最小的子数组

每日一题(LeetCode)----数组–长度最小的子数组 1.题目&#xff08; 209.长度最小的子数组&#xff09; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &…

【入门Flink】- 10基于时间的双流联合(join)

统计固定时间内两条流数据的匹配情况&#xff0c;需要自定义来实现——可以用窗口&#xff08;window&#xff09;来表示。为了更方便地实现基于时间的合流操作&#xff0c;Flink 的 DataStrema API 提供了内置的 join 算子。 窗口联结&#xff08;Window Join&#xff09; 一…

JavaScript_动态表格_添加功能

1、动态表格_添加功能.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>动态表格_添加功能</title><style>table{border: 1px solid;margin: auto;width: 100%;}td,th{text-align: ce…

SOME/IP 协议介绍(四)RPC协议规范

RPC协议规范 本章描述了SOME/IP的RPC协议。 传输协议绑定 为了传输不同传输协议的SOME/IP消息&#xff0c;可以使用多种传输协议。SOME/IP目前支持UDP和TCP。它们的绑定在以下章节中进行了解释&#xff0c;而第[SIP_RPC_450页&#xff0c;第36页]节讨论了选择哪种传输协议。…

【Go入门】面向对象

【Go入门】面向对象 前面两章我们介绍了函数和struct&#xff0c;那你是否想过函数当作struct的字段一样来处理呢&#xff1f;今天我们就讲解一下函数的另一种形态&#xff0c;带有接收者的函数&#xff0c;我们称为method method 现在假设有这么一个场景&#xff0c;你定义…

Linux驱动开发——PCI设备驱动

目录 一、 PCI协议简介 二、PCI和PCI-e 三、Linux PCI驱动 四、 PCI设备驱动实例 五、 总线类设备驱动开发习题 一、 PCI协议简介 PCI (Peripheral Component Interconnect&#xff0c;外设部件互联) 局部总线是由Intel 公司联合其他几家公司一起开发的一种总线标准&#…

前端开发引入element plus与windi css

背景 前端开发有很多流行框架&#xff0c;像React 、angular、vue等等&#xff0c;本文主要讲vue 给新手用的教程&#xff0c;其实官网已经写的很清楚&#xff0c;这里再啰嗦只是为了给新手提供一个更加简单明了的参考手册。 一、打开element plus官网选则如图所示模块安装命令…

Nginx缓存基础

1 nginx缓存的流程 客户端需要访问服务器的数据时&#xff0c;如果都直接向服务器发送请求&#xff0c;服务器接收过多的请求&#xff0c;压力会比较大&#xff0c;也比较耗时&#xff1b;而如果在nginx缓存一定的数据&#xff0c;使客户端向基于nginx的代理服务器发送请求&…

华为L410上制作内网镜像模板02

原文链接&#xff1a;华为L410上制作离线安装软件模板02 hello&#xff0c;大家好啊&#xff0c;今天给大家带来第二篇在内网搭建Apache服务器&#xff0c;用于安装完内网操作系统后&#xff0c;在第一次开机时候&#xff0c;为系统安装软件的文章&#xff0c;今天给大家介绍在…

Linux之基础开发工具gdb调试器的使用(三)

文章目录 一、Linux调试器-gdb使用1、安装gdb2、背景3、Debug和release4、区分Debug和release 二、Linux调试器-gdb命令演示1、显示指定行之后的代码&#xff08;自动记录最后一条指令&#xff09;2、断点1、打印断点2、查看断点3、删除断点4、使能&#xff08;禁用/开启&#…

StartUML的基本使用

文章目录 简介和安装创建包创建类视图时序图 简介和安装 最近在学习一个项目的时候用到了StartUML来构造项目的类图和时序图 虽然vs2019有类视图&#xff0c;但是也不是很清晰&#xff0c;并没有生成uml图&#xff0c;但是宇宙最智能的IDE IDEA有生成uml图的功能 下面就简单介…

Flowable 外部表单

内置表单需要在每个节点中去配置&#xff0c;当如果多个节点使用同一套表单属性就要配置多次比较麻烦&#xff0c;修改的时候也要修改多次&#xff0c;外部表单可以定义一次&#xff0c;然后其它节点都去引用同一个表单属性。 外部表单需要定义一个.form后缀的文件。 外部表单…

关于值传递和引用传递的问题记录

目录 1. 问题概述 1.1 测试 1.2 结果 2. ArrayList和Arrays.ArrayList 1. 问题概述 最近忙着写论文很久没更新了&#xff0c;趁现在有时间简单记录一下最近遇到的一个坑。 对于Java中的List<>类型的对象&#xff0c;按我以前理解是引用传递&#xff0c;但有一点要注…

Excel中使用数据验证、OFFSET实现自动更新式下拉选项

在excel工作簿中&#xff0c;有两个Sheet工作表。 Sheet1&#xff1a; Sheet2&#xff08;数据源表&#xff09;&#xff1a; 要实现Sheet1中的“班级”内容&#xff0c;从数据源Sheet2中获取并形成下拉选项&#xff0c;且Sheet2中“班级”内容更新后&#xff0c;Sheet1中“班…

SMART PLC MODBUSTCP速度测试

SMART PLC MODBUSTCP通信详细介绍请参看下面文章链接: S7-200SMART PLC ModbusTCP通信(多服务器多从站轮询)_matlab sumilink 多个modbustcp读写_RXXW_Dor的博客-CSDN博客文章浏览阅读6.4k次,点赞5次,收藏10次。MBUS_CLIENT作为MODBUS TCP客户端通过S7-200 SMART CPU上的…

ARM寄存器及功能介绍/R0-R15寄存器

1、ARM 寄存器组介绍 ARM 处理器一般共有 37 个寄存器&#xff0c;其中包括&#xff1a; &#xff08;1&#xff09; 31 个通用寄存器&#xff0c;包括 PC&#xff08;程序计数器&#xff09;在内&#xff0c;都是 32 位的寄存器。 &#xff08;2&#xff09; 6 个状态寄存器…

【中间件篇-Redis缓存数据库02】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)

Redis高级特性和应用(慢查询、Pipeline、事务、Lua) Redis的慢查询 许多存储系统&#xff08;例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间&#xff0c;当超过预设阀值,就将这条命令的相关…