当前位置: 首页 > news >正文

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

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

(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.lryc.cn/news/227474.html

相关文章:

  • 基于springboot实现桥牌计分管理系统项目【项目源码】
  • 机器学习——朴素贝叶斯
  • 【PTE-day07 文件上传2】
  • 设计模式之十一:代理模式
  • 在spring boot中调用第三方接口时重试问题
  • 记录一次多数据源配置失效的情况
  • EasyExcel导出替换列中的变量
  • 机器人规划算法——将多边形障碍物离散到地图像素点上?
  • windows11使用docker部署安装minio
  • 【JavaEESpring】Spring Web MVC⼊⻔
  • flutter逆向 ACTF native app
  • 【Redis】set 集合
  • 【算法与设计模式】
  • Javaweb之javascript的小案例的详细解析
  • Vant 移动端UI 组件自动引入
  • 敏捷开发是什么?敏捷开发流程是怎么样的?
  • 【CASS精品教程】cass3d 11.0加载超大影像、三维模型、点云数据
  • Unity Input System最简单使用
  • 3.前端调式(断点调式)
  • 拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、用户使用手册)
  • ESP32网络开发实例-将数据保存到InfluxDB时序数据库
  • NestJS——基于Node.js 服务器端应用程序的开发框架
  • EXCEL中将UTC时间戳转为日期格式(精确到秒)
  • 2023年【起重机械指挥】考试试卷及起重机械指挥操作证考试
  • 组件的设计原则
  • 安卓编译命令mm和mmm的区别(mm编译当前工作目录,mmm可编译指定目录)
  • 计算机毕业设计 基于Springboot的影院购票管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 使用.net 构建 Elsa Workflow
  • open clip论文阅读摘要
  • Vue3像Vue2一样在prototype(原型)上挂载数据