【数据结构与算法】数据结构初阶:详解二叉树(六)——二叉树应用:二叉树选择题


🔥个人主页:艾莉丝努力练剑

❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题

🍉学习方向:C/C++方向

⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平



重要提醒:为什么我们要学那么多的数据结构?这是因为没有一种数据结构能够去应对所有场景。我们在不同的场景需要选择不同的数据结构,所以数据结构没有谁好谁坏之分,而评估数据结构的好坏要针对场景,如果在一种场景下我们需要频繁地对头部进行插入删除操作,那么这个时候我们用链表;但是如果对尾部进行插入删除操作比较频繁,那我们用顺序表比较好。

        因此,不同的场景我们选择不同的数据结构。


前言:本篇文章,我们继续来看二叉树,来刷一刷选择题,其实也是对前面学过的知识的一个回顾与练习,毕竟笔试面试已经越来越看重程序员的算法能力,把选择题作为一个对已学知识的一个快速回顾——比如说加深对数据结构某个重要性质的记忆、降低记忆成本——还是很值得去做的。我们做这些选择题正有此意:一来加深了对二叉树性质的理解;二来通过做几道代表性的选择题我们将知识点迅速运用了起来,让知识顺利扎根在大脑;三来也是对自己学习二叉树学习情况的一个小测验。


目录

正文

一、二叉树性质相关选择题

(一)性质

(二)题目

1、题目1 

2、题目2

3、题目3

4、题目4

二、链式二叉树遍历相关选择题 

1、题目1 

2、题目2

3、题目3

4、题目4

5、加餐1:题目5

6、加餐2:题目6

三、二叉树树度相关选择题

1、题目1

结尾


回顾:


正文

一、二叉树性质相关选择题

(一)性质

证明:

假设一个二叉树有 a 个度为2的节点,b 个度为1的节点,c 个叶节点,则这个二叉树的边数是 2a+b,另一方面,由于共有 a+b+c 个节点,所以边数等于 a+b+c-1。

2a + b = a + b + c - 1 ,即: a = c-1。

(二)题目

1、题目1 

1、某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )

A 不存在这样的二叉树

B 200

C 198

D 199

解析:

2、题目2

2、在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

A n

B n+1

C n-1

D n / 2

解析:

在完全二叉树,有多少度为1的节点个数  

3、题目3

3、一棵完全二叉树的结点数位为531个,那么这棵树的高度为( )

A 11

B 10

C 8

D 12

解析:

4、题目4

4、一个具有767个结点的完全二叉树,其叶子结点个数为()

A 383

B 384

C 385

D 386

解析:

二叉树性质相关选择题答案:

1、B

2、A

3、B

4、B

二、链式二叉树遍历相关选择题 

1、题目1 

1、某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。

该完全二叉树的前序序列为( )

A. ABDHECFG

B. ABCDEFGH

C. HDBEAFCG

D. HDEBFGCA

解析:

2、题目2

2、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG。

则二叉树根结点为()

A E

B F

C G

D H

解析:先序遍历打印的一个是就是根节点,知道了先序遍历,根节点就找到了。

3、题目3

3、设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,

则二叉树前序遍历序列为____。

A adbce

B decab

C debac

D abcde

解析:

方法: 确定一个删掉一个,也就是说:已知任意两个求第三个。

根据后序遍历找到根节点,中序遍历看左右孩子。如下图:

1、根据后序遍历我们确定根节点就是a:

2、确定了,我们就把它删掉,以免对我们产生干扰:

3、确定了a是根节点,我们看一下中序遍历,a的左子树是b,确定的就删掉:

4、我们看:a的右子树,中序遍历的结果是dce,后序遍历的结果是dec,ab我们都删掉了,没有干扰项。dec,根节点是c,既然根节点是c,我们再回到中序遍历,c的左子树是d,c的右子树是e。后面大家做这种题目就可以采用这种方法。

4、题目4

4、某二叉树的后序遍历序列与中序遍历序列相同,均为 ABCDEF,则按层次输出(同一层从左到右)的序列为()

A FEDCBA

B CBAFED

C DEFCBA

D ABCDEF

解析: 

只有左子树,没有右子树。 

5、加餐1:题目5

5、已知某二叉树的中序遍历序列为JGDHKBAELIMCF,后序遍历序列为JGKHDBLMIEFCA,则其前序遍历序列为( )

A.ABDGHJKCEFILM

B.ABDGJHKCEILMF

C.ABDHKGJCEILMF

D.ABDGJHKCEIMLF

解析:

由后序遍历确定子树的根,后序遍历从后向前看,最后一个元素为根,和前序遍历刚好相反,从后向前看后序遍历,应该是根,右,左,根据中序遍历确定子树的左右区间。

详解:

我们根据后序遍历可知,A是根节点——

A的左子树:JGDHKB,A的右子树:ELIMCF;

A的左子树的根:B,A的右子树的根:C;

B的左子树:JGDHK,B的右子树:空,C的左子树:ELIM,C的右子树:F;

B的左子树的根:D,C的左子树根:E;

D的左子树的根:G,D的右子树的根:H,E的右子树的根:I。

6、加餐2:题目6

6、已知某二叉树的前序遍历序列为5 7 4 9 6 2 1,中序遍历序列为4 7 5 6 9 1 2,

则其后序遍历序列为( ) 

A.4 2 5 7 6 9 1

B.4 2 7 5 6 9 1

C.4 7 6 1 2 9 5

D.4 7 2 9 5 6 1

解析: 

首先根据前序和中序遍历确定二叉树结构:
前序遍历是根左右,可知
前序遍历第一个数5是根节点
在中序遍历中找到5,左边4 7是左子树,右边6 9 1 2是右子树。
前序中5后面是7,7是左子树的根,中序中7左边是4,所以7的左子节点是4 。
前序接着是4、9,9是右子树的一部分,中序中5右边6在9前,所以9是6的父节点,我们逐步构建出二叉树。
已知后序遍历顺序是
左右根
正确构建二叉树后,后序遍历应为4 7 6 1 2 9 5。

链式二叉树遍历相关选择题答案:

1、A

2、A

3、D

4、A

5、B

6、C

三、二叉树树度相关选择题

1、题目1

1、一颗拥有1000个结点的树度为4,则它的最小深度是( )

A.5

B.6

C.7

D.8

解析·: 

要使树深度最小,应让树尽可能“满”,即除最后一层,每层结点数达该度下最大值

(度为4,则每层最多4^(i - 1)个结点,i 为层数 )。
设深度为h,前h - 1层是满的,结点数和为(4^(h - 1) - 1) / (4 - 1) 。
当h = 5,前4层和为(4^4 - 1) / 3 = 85;

当h = 6,前5层和为(4^5 - 1) / 3 = 341;

当h = 7,前6层和为(4^6 - 1) / 3 = 1365 > 1000 。
且前5层和341 < 1000,前6层和1365 > 1000,所以最小深度是6 。

二叉树树度相关选择题答案:

1、B


结尾

往期回顾:

【数据结构与算法】数据结构初阶:详解二叉树(五)——链式结构二叉树(下):二叉树的链式结构的实现

【数据结构与算法】数据结构初阶:详解二叉树(四)——链式结构二叉树(上):前中后序遍历、创建一棵链式二叉树

【数据结构与算法】数据结构初阶:详解二叉树(三)——堆(续):向上向下调整算法的证明及时间复杂度、TOP-K问题详解

【数据结构与算法】数据结构初阶:详解二叉树(二)——堆

【数据结构与算法】数据结构初阶:详解二叉树(一)

【数据结构与算法】数据结构初阶:详解栈和队列(下)——队列

【数据结构与算法】数据结构初阶:详解栈和队列(上)——栈

【数据结构与算法】数据结构初阶:详解顺序表和链表(五)——双向链表

【数据结构与算法】数据结构初阶:详解顺序表和链表(四)——单链表(下)

【数据结构与算法】数据结构初阶:详解顺序表和链表(三)——单链表(上)

【数据结构与算法】数据结构初阶:动态顺序表各种方法(接口函数)复盘与整理

结语:本篇文章到这里就结束了,本文讲解的选择题有的很简单,有的则要想一想。总之,大家一定要自己动手写一写,学习之后再实践,效率翻番!                

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

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

相关文章

Android广播实验

【实验目的】了解使用Intent进行组件通信的原理&#xff1b;了解Intent过滤器的原理和匹配机制&#xff1b;掌握发送和接收广播的方法【实验内容】任务1、普通广播&#xff1b;任务2、系统广播&#xff1b;任务3、有序广播&#xff1b;【实验要求】1、练习使用静态方法和动态方…

html转word下载

一、插件使用//转html为wordnpm i html-docx-js //保存文件到本地npm i file-saver 注&#xff1a;vite 项目使用esm模式会报错&#xff0c;with方法错误&#xff0c;修改如下&#xff1a;//直接安装修复版本npm i html-docx-fixed二、封装导出 exportWord.jsimport htmlDocx f…

北方公司面试记录

避免被开盒&#xff0c;先称之为“北方公司”&#xff0c;有确定结果后再更名。 先说流程&#xff0c;线下面试&#xff0c;时间非常急&#xff0c;下午两点钟面试&#xff0c;中午十二点打电话让我去&#xff0c;带两份纸质简历。 和一般的菌工单位一样&#xff0c;先在传达室…

linux——ps命令

PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND0 1 1 1 ? -1 Ss 0 0:01 /usr/lib/systemd/systemd1 123 123 123 ? -1 S 0 0:00 /usr/sbin/sshd -D123 456 456 456 pts/0 456 R 10…

C#.NET 依赖注入详解

一、是什么 在 C#.NET 中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09; 是一种设计模式&#xff0c;用于实现控制反转&#xff08;Inversion of Control&#xff0c;IoC&#xff09;&#xff0c;以降低代码耦合、提高可测试性和可维护…

Vue监视数据的原理和set()的使用

在 Vue 中&#xff0c;Vue.set()&#xff08;或 this.$set()&#xff09;是用于解决响应式数据更新检测的重要方法&#xff0c;其底层与 Vue 的数据监视原理紧密相关。以下从使用场景和实现原理两方面详细说明&#xff1a;一、Vue.set () 的使用场景与用法1. 为什么需要 Vue.se…

在 Vue 中,如何在回调函数中正确使用 this?

在 Vue 组件中&#xff0c;this 指向当前组件实例&#xff0c;但在回调函数&#xff08;如定时器、异步请求、事件监听等&#xff09;中&#xff0c;this 的指向可能会丢失或改变&#xff0c;导致无法正确访问组件的属性和方法。以下是在回调函数中正确使用 this 的几种常见方式…

第4章唯一ID生成器——4.4 基于数据库的自增主键的趋势递增的唯一ID

基于数据库的自增主键也可以生成趋势递增的唯一 ID&#xff0c;且由于唯一ID不与时间戳关联&#xff0c;所以不会受到时钟回拨问题的影响。 4.4.1 分库分表架构 数据库一般都支持设置自增主键的初始值和自增步长&#xff0c;以MySQL为例&#xff0c;自增主键的自增步长由auto_i…

设计模式:Memento 模式详解

Memento 模式详解Memento&#xff08;备忘录&#xff09;模式是一种行为型设计模式&#xff0c;用于在不破坏封装性的前提下&#xff0c;捕获并外部化一个对象的内部状态&#xff0c;以便在之后能够将该对象恢复到原先保存的状态。它广泛应用于需要实现撤销&#xff08;Undo&am…

数据结构(6)单链表算法题(下)

一、环形链表Ⅰ 1、题目描述 https://leetcode.cn/problems/linked-list-cycle 2、算法分析 思路&#xff1a;快慢指针 根据上图所示的流程&#xff0c;我们可以推测出这样一个结论&#xff1a;若链表带环&#xff0c;快慢指针一定会相遇。 那么&#xff0c;这个猜测是否正…

智能制造,从工厂建模,工艺建模,柔性制造,精益制造,生产管控,库存,质量等多方面讲述智能制造的落地方案。

智能制造&#xff0c;从工厂建模&#xff0c;工艺建模&#xff0c;柔性制造&#xff0c;精益制造&#xff0c;生产管控&#xff0c;库存&#xff0c;质量等多方面讲述智能制造的落地方案。

Qt 分裂布局:QSplitter 使用指南

在 GUI 开发中&#xff0c;高效管理窗口空间是提升用户体验的关键。QSplitter 作为 Qt 的核心布局组件&#xff0c;让动态分割窗口变得简单直观。一、QSplitter 核心功能解析 QSplitter 是 Qt 提供的布局管理器&#xff0c;专用于创建可调节的分割区域&#xff1a; 支持水平/垂…

R语言与作物模型(DSSAT模型)技术应用

R语言在DSSAT模型的气候、土壤、管理措施等数据准备&#xff0c;自动化模拟和结果分析上都发挥着重要的作用。一&#xff1a;DSSAT模型的高级应用 1.作物模型的概念 2.DSSAT模型发展现状 3.DSSAT与R语言的安装 4.DSSAT模型的高级应用案例 5.R语言在作物模型参数优化中的应用 6.…

JavaSE:学习输入输出编写简单的程序

一、打印输出到屏幕 Java提供了三种核心输出方法&#xff0c;适合不同场景&#xff1a; System.out.println() 打印内容后 自动换行 System.out.println("Welcome"); System.out.println("to ISS"); // 输出&#xff1a; // Welcome // to ISSSystem.out…

访问者模式感悟

访问者模式 首先有两个东西: 一个是访问者vistor (每一个访问者类都代表了一类操作) 一个是被访问者entity (model /info/pojo/node等等这些都行)也就是是说是一个实体类 其操作方法被抽离给了其他类。 访问者模式的核心思想就是**“把操作从数据结构中分离出来,每种操作…

从零到部署:基于Go和Docker的全栈短链接服务实战(含源码)

摘要&#xff1a;本文将手把手带你使用Go语言&#xff0c;并遵循依赖倒置、分层架构等最佳实践&#xff0c;构建一个高性能、高可用的全栈短链接生成器。项目采用Echo框架、GORM、Redis、MySQL&#xff0c;并通过Docker和Docker Compose实现一键式容器化部署到阿里云服务器。文…

MyBatis_3

上一篇文章&#xff0c;我们学习了使用XML实现MyBatis进行增、删、查、改等操作&#xff0c;本篇文章&#xff0c;我们将学习#{ }和${ }获取方法参数的区别和使用MyBatisXML实现动态SQL语句。 #{ }和${ }的区别 在之前的文章中我们都是使用#{ }进行赋值&#xff0c;但实际上M…

智能图书馆管理系统开发实战系列(一):项目架构设计与技术选型

项目背景 智能图书馆管理系统&#xff08;ILMS&#xff09;是一个现代化的桌面应用程序&#xff0c;采用前后端分离架构&#xff0c;结合了Web技术的灵活性和桌面应用的用户体验。本项目从高保真原型设计开始&#xff0c;经过完整的软件开发生命周期&#xff0c;最终实现为一个…

应急前端“黄金3分钟”设计:极端场景下的操作界面极速搭建技术

摘要**地震突发&#xff0c;应急指挥系统的操作界面却因加载缓慢无法及时调取数据&#xff1b;火灾现场&#xff0c;消防员手持终端的操作步骤繁琐&#xff0c;延误救援时机。在分秒必争的极端场景中&#xff0c;传统前端操作界面为何频频 “掉链子”&#xff1f;怎样才能在 “…

【Android】三种弹窗 Fragment弹窗管理

三三要成为安卓糕手 零&#xff1a;布局转换 在很多工程当中用的都是LinearLayout和relativelayout&#xff0c;这两者都可以转化为Constrainlayout 注&#xff1a;这种用法并不能精确转换&#xff0c;具体还是要根据自己的需求来做布局约束一&#xff1a;snackbar显示弹窗 ((2…