C语言数据结构 - 选择题集合(二叉树)

news2024/11/25 2:37:49

一生负气成今日

四海无人对夕阳


目录

 树的专辑

 树的专辑

1.有n个元素的完全二叉树的深度是(   )

A.nlogn

B.nlogn+1

C.logn

D.logn+1

答案:D 

解析:

设完全二叉树的节点数为 N,高度为 h ,高度为 h 时空的结点个数为 x

我们根据完全二叉树的性质得: N = 2^{h}-1-x

所以 h = log_{2}\left ( N+1+x \right ) 然后向上取整 h = log_{2}N + 1


 

2.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为( )个

A.11

B.12​

C.13

D.14

答案:C 

解析:

设 Ni 表示度为 i 的节点个数,则节点总数 N = N0 + N1 + N2

节点个数于节点边的关系:

N 个节点的树有 N-1 个边

边与度的关系:N - 1 = N1 + 2 * N2

故:N0 + N1 + N2 - 1 = N1 + 2 * N2

因此,得:N0 = N2 + 1

回到原题,N0 = 3,N1 = 8,可得N2 = 2

因此答案是 3 + 8 + 2 = 13


3.一颗完全二叉树有1001个结点,其叶子结点的个数是( )

A.251

B.500

C.501

D.不能确定

答案:C 

解析:

首先我们知道任意一棵二叉树都有 N0 = N2 + 1 性质(设 Ni 表示度为 i 的节点个数)

另外,在完全二叉树中,如果节点总个数为奇数,则没有度为 1 的节点,如果节点总个数为偶数,只有一个度为 1 的节点

我们分类讨论即可:

当节点数为偶数时,N = N2 + N0 + 1 即 N = 2N0 (因为算出是分数,所以不合理,即没有度为1的节点)

当节点数为奇数时,N = N2 + N0 即 N = 2N0 - 1 (解出的结果得:N0 = 501)


 

4.在一颗度为3的树中,度为3的结点有2个,度为2的结点有1个,度为1的结点有2个,则叶子结点有( )个 

A.4

B.5

C.6

D.7

答案:C

解析:

设度为 i 的节点个数为 Ni,该树总共有 N 个节点,则 N = N0 + N1 + N2 + N3

根据我们之前所学的知识:我们知道一颗 N 节点的数有N-1条边 (该树中除了根节点没有前驱以外,每个节点有且只有一个前驱

根据度的定义,总边数与度之间的关系为:N-1 = 0*N0 + 1*N1 + 2*N2 + 3*N3

 带入节点联立 N = N0 + N1 + N2 + N3  N-1 = 0*N0 + 1*N1 + 2*N2 + 3*N3 两个方程

 解得:N0 = 6


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

A.5

B.6

C.7

D.8

答案:B

解析:

如果这棵树每一层都是满的,则它的深度最小,假设它为一个四叉树,高度为h,则这个数的节点个数为 N = \left ( 4^{h}-1\right )/3

​​​​​​​节点数:   1      +      4*4^0    +       4*4^1     +       4*4^h-1

          1             2                3                  h

          层            层               层                 层

整棵树的节点得:4^0+4^1+4^2+...+4^(h-1) 等比数列求和=(4^h-1)/3

当 h = 5,最大节点数为 341, 当 h = 6,最大节点数为 1365,所以最小深度应该为 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

答案:C

解析:
我们可以通过:
前序遍历找到子树的根,在中序遍历中找到根的位置,然后确定根左右子树的区间

首先我们根据前序找到根节点:

5 7 4 9 6 2 1

然后在中序中找到根节点的位置:

4 7 5 6 9 1 2

这个时候 4 7 就是 5 的左子树,6 9 6 2 1 就是 5 的右子树

然后我们可以根据这个规律将这颗树补全:
我们再回到前序:7 4 9 6 2 1

这个时候 7 就是5的左子树即当前的根

再回到中序:4 7 6 9 1 2

这个时候 4 就是 7 的左子树

再回到前序: 9 6 2 1

这个时候 开始构建右子树,而 9 就是 5 的右子树即当前根

再回到中序: 6 9 1 2

这个时候 6 就是 9 的左子树,1 2 在 9 的右子树上

再回到前序: 2 1

这个时候  2 就是 9 的右子树即当前根

再回到中序: 1 2

这个时候 1 就是 2 的左子树,这个时候树已经构建完成了

我们再根据后序遍历的规律就可以得出答案了 ! ! !


 

7.如果一颗二叉树的前序遍历的结果是ABCD,则满足条件的不同的二叉树有( )种

A.13

B.14

C.15

D.16

答案:B

解析:

首先这棵二叉树的高度一定在3~4层之间:

三层:

A(B(C,D),()), A((),B(C,D)), A(B(C,()),D), A(B((),C),D),

A(B,C(D,())), A(B,C((),D))

一共 6 种

四层:

如果为四层,就是单边树,每一层只有一个节点,除过根节点A,其他节点都有两种选择,在上层节点的左边还是右边,所以2*2*2共8种

总共为 14 种


 

8.设根结点的深度为1,则一个拥有n个结点的二叉树的深度一定在(   )区间内 

A.[log(n + 1),n]

B.[logn,n]

C.[log(n + 1),n - 1]

D.[log(n + 1),n + 1]

答案:C

解析:
首先我们知道拥
n个结点的二叉树的:

最大深度的模型就是单边数,节点数即深度,也就是 n

最小深度的模型可以看作完全二叉树,根据性质: h = log(n+1) 向上取整

也就是说:二叉树的深度范围在 [log(n + 1),n] 之间


9.设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树。假如一棵这样的二叉树中有m(m>0)个叶子结点,那么该二叉树上的结点总数为( )

A.2m+1

B.2(m-1)

C.2m-1

D.2m

答案:C

解析:

根据二叉树的性质,在任意的二叉树中,度为 0 的节点比度为 2 的节点多了 1 个

现在叶子节点为 m 个,即度为 0 的节点有 m 个,那度为 2 的节点个数就为 m-1

而题目说该二叉树中只有度为2和度为0的节点 ,因此总的节点数就为:N = m+m-1 = 2m-1


10.一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( )

A.所有的结点均无左孩子

B.所有的结点均无右孩子

C.只有一个叶子结点

D.至多只有一个结点

答案:C

解析:

前序遍历:根 左 右

后序遍历:左 右 根

从二叉树 前序 和 后序遍历结果规则中可以看出,如果树中每个节点只有一个孩子时,遍历结果肯定是反的

比如下面这前序和中序序列所构成的树的结构:

 故每个节点只有一个孩子,即只有一个叶子节点


11.设哈夫曼树中有199个结点,则该哈夫曼树中有(    )个叶子结点。
A.100
B.99
C.101
D.102

答案:A

解析:

根据哈夫曼树的性质:两两节点相结合形成的树,所以没有度为 1 的节点

再根据二叉树的特性:度为 0 的节点比度为 2 的节点多了 1 个(即:N0 = N2 + 1

所以 N = N0 + N2 和 N0 = N2 + 1 联立解得:N0 = 100


12.将一株有100个节点的完全二叉树从上到下,从左到右依次进行编号,根节点的编号为1,则编号为49的节点的 左孩子编号为(  )

A.89

B.98
C.50
D.25

答案:B

解析:

 设父节点为parent,孩子节点为child,当前编号 n,我们根据二叉树的性质得:

对于偶数节点(左孩子)其父节点:parent = n / 2

对于奇数节点(右孩子)其父节点:parent = (n-1) / 2

98 为偶数,其父节点编号为 98 / 2 = 49


13.由权值分别为 9、2、5、7、4 的5个叶子结点构造一棵哈夫曼树,则该树的带权路径长度为(  )

A.65
B.45
C.55

D.60

答案:D

解析:

首先我们需要构建一颗哈夫曼树:

构建方法:

对于给定的有各自权值的 n 个结点

<1>在 n 个权值中选出两个最小的权值,对应的两个结点组成一个新的二叉树,且新二叉树的根结点的权值为左右孩子权值的和
<2>在原有的 n 个权值中删除那两个最小的权值,同时将新的权值加入到 n–2 个权值的行列中,以此类推
<3>重复 1 和 2 ,直到所以的结点构建成了一棵二叉树为止,这棵树就是哈夫曼树

带权路径长度是指所有叶子结点深度乘以其权值之和,也就是(2+4)*3 + (5+7+9)*2 = 60


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

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

相关文章

python零基础知识 - 定义列表的三种方式,循环列表索引值

这一小节&#xff0c;我们将从零基础的角度看一下&#xff0c;python都有哪些定义列表的方式&#xff0c;并且循环这个列表的时候&#xff0c;怎么循环&#xff0c;怎么循环他的索引值&#xff0c;怎么拿到的就是元素值。 说完循环&#xff0c;我们会说一说关键的break和contin…

分布式存储故障导致数据库无法启动故障处理---惜分飞

国内xx医院使用了国外医疗行业龙头的pacs系统,由于是一个历史库,存放在分布式存储中,由于存储同时多个节点故障,导致数据库多个文件异常,数据库无法启动,三方维护人员尝试通通过rman归档进行应用日志,结果发现日志有损坏报ORA-00354 ORA-00353,无法记录恢复,希望我们给予支持 M…

AI智能分析高精度烟火算法EasyCVR视频方案助力打造森林防火建设

一、背景 随着夏季的来临&#xff0c;高温、干燥的天气条件使得火灾隐患显著增加&#xff0c;特别是对于广袤的森林地区来说&#xff0c;一旦发生火灾&#xff0c;后果将不堪设想。在这样的背景下&#xff0c;视频汇聚系统EasyCVR视频融合云平台AI智能分析在森林防火中发挥着至…

人脸消费给传统食堂带来的变化

消费的技术基础是脸部识别&#xff0c;脸部识别是基于人的容貌特征信息进行认证的生物特征识别技术&#xff0c;其突出的特征是以非接触方式进行识别&#xff0c;避免个人信息的泄露。 面部识别和指纹识别、掌纹识别、视网膜识别、骨骼识别、心率识别等都是人体生物特征识别技术…

自然资源-城镇开发边界内详细规划编制技术指南解读

自然资源-城镇开发边界内详细规划编制技术指南解读

护眼台灯和普通台灯差别很大吗?专业护眼灯品牌有哪些?

随着科技的不断演进&#xff0c;台灯的设计也日益脱胎换骨&#xff0c;从曾经的笨重造型转变为如今轻盈雅致的外观。它们的功能同样经历了多样化的革新&#xff0c;变得更加人性化和便捷。作为学习、阅读和办公环境中不可或缺的照明工具&#xff0c;台灯所提供的光线舒适度至关…

redis抖动问题导致延迟或者断开的处理方案

目录&#xff1a; 1、使用背景2、redis重试机制3、redis重连机制4、其他一些解决redis抖动问题方案 1、使用背景 客户反馈文件偶现打不开&#xff0c;报错现象是session not exist&#xff0c;最终定位是redis抖动导致的延迟/断开的现象&#xff0c;最终研发团方案是加入redis…

电脑nvidia驱动和合适版本的duda--自用 回忆版

参考文献&#xff1a;http://t.csdnimg.cn/ecDuG 内容很多抄的这个&#xff0c;主要害怕链接失效 一、Ubuntu 18.04 安装NVIDIA显卡驱动 1、查看本机显卡能够配置的驱动信息 ubuntu-drivers devices所以可以看出&#xff0c;推荐 nvidia-driver-530 - distro non-free 2、安…

HTML/CSS2

1.前置说明 HTML/CSS1 2.img元素 格式&#xff1a; <img src"图片地址" alt"占位文字" width"图片宽度" height"图片高度">其中alt是当图片加载失败时显示的文字 而且不同内核的浏览器显示出来的占位文字的效果也是不尽相同…

【linux软件基础知识】如何使用 run_list 字段将任务放入就绪队列中

在给定的代码片段中,struct task_struct 表示内核中任务或进程的进程控制块 (PCB)。 run_list 字段的类型为 struct list_head,这表明它是链表实现的一部分。 run_list字段在Linux内核中常用来表示任务在调度队列中的位置,例如就绪队列或各种优先级队列。 init_task是一个…

Elasticsearch入门基础和集群部署

Elasticsearch入门基础和集群部署 简介基础概念索引&#xff08;Index&#xff09;类型&#xff08;Type&#xff09;&#xff08;逐步弃用&#xff09;文档&#xff08;Document&#xff09;字段&#xff08;Field&#xff09;映射&#xff08;Mapping&#xff09;分片&#x…

人工智能能否解决科学问题:Wolfram的视角

引言 在当今AI技术飞速发展的背景下&#xff0c;它在科学研究领域的应用正逐渐深入。从AlphaFold 3的推出到日益复杂的计算模型&#xff0c;AI似乎在向科学家的角色靠拢。然而&#xff0c;美国计算机科学家Stephen Wolfram在一系列讲座和文章中提出了反思&#xff1a;AI真的能…

网站localhost和127.0.0.1可以访问,本地ip不可访问解决方案

部署了一个网站, 使用localhost和127.0.0.1加端口号可以访问, 但是使用本机的ip地址加端口号却不行. 原因可能有多种. 可能的原因: 1 首先要确认是否localhost对应的端口是通的(直接网址访问), 以及你无法访问的那个本机ip是否正确(使用ping测试)&#xff1b; 2 检查本机的防火…

uniapp开发小程序使用vue的v-html解析富文本图片过大过宽显示超过屏幕解决办法

如果没有设置的话&#xff0c;就会导致图片溢出&#xff0c;过宽显示或者错位显示&#xff0c;显示效果非常的丑陋&#xff1a; 修改后显示的效果&#xff1a; 网上比较low的解决办法&#xff1a;网上各种解决方法核心思想就是在数据层把数据模板上的img数据加上style样式&…

【STM32 |新建一个工程】基于标准库(库函数)新建工程

目录 STM32开发方式 库函数文件夹 建工程步骤 库函数工程建立 建立工程总结 STM32开发方式 目前stm32的开发方式主要有基于寄存器的方式、基于标准库的方式&#xff08;库函数的方式&#xff09;、基于HAL库的方式基于库函数的方式是使用ST官方提供的封装好的函数&…

sscanf字符串解析

ATCIPSNTPTIME? //发生的指令 CIPSNTPTIME:Tue Oct 19 15:17:56 2021 //回复的数据 //接受数据缓存 char* recvStrBuf "CIPSNTPTIME:Tue Oct 19 15:17:56 2021"; char* weekStr; char* monthStr; int day,hour,minute,second,year; sscanf(recvStrBuf,""…

Emacs之取消sh-mode模式下:快捷键C-c C-c(一百三十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

第十三篇:智慧之网:深度探索关系型数据库的数学奥秘与实战技艺

智慧之网&#xff1a;深度探索关系型数据库的数学奥秘与实战技艺 1. 引言 1.1 数据时代的基石 在数字化的浪潮中&#xff0c;数据已成为新时代的石油&#xff0c;而关系型数据库则是这座数据矿藏的精炼厂。自E.F. Codd在1970年提出关系模型以来&#xff0c;关系型数据库以其坚…

VScode通过ssh远程连接服务器被拒绝:permission denied, please try again

使用场景&#xff1a; 使用windows系统下的vscode远程连接服务器的linux系统&#xff0c;终端提示permission denied, please try again,但是使用cmd是可以远程登录的。 解决办法&#xff1a; 前提条件windows端的vscode安装了ssh远程连接的相关插件Remote - SSH&#xff0c;…

C++ vs Rust vs Go 性能比较

本文对C、Rust和Go三种编程语言编写的gunzip程序进行了性能比较&#xff0c;通过基准测试试图尽可能公平的比较它们的性能。原文: Performance — C vs Rust vs Go 本文将通过一些基准测试&#xff0c;比较 C 和 Rust 以及 Go 编写的相同程序的性能。我们将尽最大努力将语言差异…