二叉树的相关选择题和基本方法(持续更新)

news2024/12/31 5:56:33

二叉树相关选择题和基本方法

  • 选择题1
  • 选择题2
  • 选择题3
  • 选择题4
  • 选择题5
  • 选择题6
  • 选择题7
  • 选择题8
  • 选择题9
  • 选择题10
  • 选择题11
  • 选择题12
  • 选择题13
  • 选择题14
  • 选择题15
  • 选择题16
  • 选择题17
  • 选择题18
  • 选择题19
  • 选择题20
  • 选择题21
  • 选择题22
  • 实现二叉树的基本操作
    • 查询二叉树当中节点的个数
      • 遍历思想
      • 子问题思想
    • 获取叶子节点的个数
      • 遍历思想
      • 子问题思想
    • 检测值为value的元素是否存在
    • 获取一颗二叉树的高度

如果一棵树从1开始按下图一层一层的顺序编号,如果在到最后一个节点前没有出现空节点,那么则这棵树是完全二叉树

在这里插入图片描述

在此图中,如果10之前只要存在一个节点不存在,则就不是完全二叉树。

选择题1

在这里插入图片描述

解:题目中描述 一颗完全二叉树的某个节点没有左孩子,所以它一定也没有右孩子,所以度为0,为叶子节点,选B


选择题2

在这里插入图片描述

解:核心公式:n0 = n2 + 1(n0、n1、n2分别代表度0、1、2的点)

总的节点数 = n0 + n1 + n2

有题目可得:n0 = 3, n1= 8,所以n2 = 2

所以总的节点数 = 2 + 3 + 8 = 13,选C


选择题3

在这里插入图片描述

解:

A:树是一种特殊的无环图,树中的节点不能相交,A错误
B:树的度是指所有节点中度最大的节点的度,B错误
C:树的深度指的是树中的节点存在的最高层数,并不是节点数最多的那一层,C错误
D:D正确


选择题4

在这里插入图片描述
解:

  1. 利用前序遍历和中序遍历还原整颗二叉树
  2. 得到二叉树的后序遍历

前序遍历字符串的第一个节点一定是根节点

在中序遍历字符串中,5的左边节点一定在5的左子树里,5的右边节点一定在5的右子树。

从前往后逐一将前序遍历的节点当做根节点,再根据该节点在中序遍历的位置得到他的左右子树,就可以构造出二叉树

在这里插入图片描述
这是中序遍历的序列

现在我们从前序遍历的5开始。5的左边的数字在5的左子树里,右边数字同理

在这里插入图片描述
下一个数字是7,所以4是7的左儿子,由于7的右边没有数字(大前提是在5的左边),所以7没有右儿子

在这里插入图片描述

下一个数字是4,由于4左右都没有数字了,所以没有左右儿子,接下来是 数字9

6在9的左边,数字1、2在9的右边

在这里插入图片描述

最后 6没有,1在2的左边,所以最终的二叉树长下面这个样子
在这里插入图片描述
最终易得后序遍历为 4 7 6 1 2 9 5 ,所以选C


选择题5

在这里插入图片描述

解:
1. 假设有一个postIndex下标 从后序遍历序列的末尾开始准备向前遍历
2. 每次找到 后序遍历序列中postIndex下标的值其 所在中序遍历序列的位置
3. 位置左边为左子树,右边为右子树

在这里插入图片描述

找到A在中序遍历序列的位置

在这里插入图片描述

接着找C,后序遍历优先度是 左 右 根,倒着遍历就相当于是 根 右 左,所以找C 需要优先在A的右子树里找,如果在右子树里找不到,就证明右子树为空树

重复的找,直到postIndex指向 J的左边位置,就可以画出整个二叉树的结构

在这里插入图片描述

有了二叉树的结构,易得前序遍历
在这里插入图片描述
所以ABDGJHKCEILMF,所以选B

选择题6

在这里插入图片描述
解:

  1. 和选择题4一样,通过前序遍历和中序遍历构造二叉树
  2. 通过二叉树的结构判断选哪个选项
    在这里插入图片描述

在这里插入图片描述

根据二叉树的结构,选项ABD都是错的,所以选C

选择题7

在这里插入图片描述
n0、n1、n2分别代表整棵树中度为0、1、2的节点总个数

解:

  1. 要么是叶子节点,要么有两颗子树 的意思是 n1 = 0
  2. m个叶子节点代表 n0 = m
  3. 又因为 n0 = n2 + 1(所有二叉树都满足的公式),且 节点总数 = n0 + n1 + n2

所以转变成了一下问题
在这里插入图片描述

所以最终答案是 2m-1,选C


选择题8

在这里插入图片描述

解:

  1. 最深情况是 每一层只有一个节点,故深度最大是n
  2. 深度最小的情况是,该二叉树类似于完全二叉树排列,根据完全二叉树的性质,深度为 log(n+1)向上取整
  3. 所以选A

选择题9

在这里插入图片描述
解:

  1. A选项公式为二叉树一定满足的公式,证明如下
  2. N 个节点一定有 N - 1 个边(除了根节点所有的都会带一个边
  3. n0 + n1 + n2 = N(三种节点相加等于节点总和), 2n2 + 1 n1 + 0*n0 = N - 1(三种边数等于总边数
  4. 2*n2 + n1 = n0 + n1 + n2 - 1
  5. 相消之后 得到 n0 = n2 + 1

选择题10

在这里插入图片描述
解:

  1. 广度优先遍历是一层一层的遍历,只有当把下一步所有可能的位置遍历完才会进行更深层次的遍历,所以选层序遍历
  2. 深度优先遍历注重深度,会先遍历完一条完整的路径(从跟到叶子的路径),然后退回继续遍历其他路径,前序遍历是一种深度优先遍历
  3. 所以选D

选择题11

在这里插入图片描述

解:

  1. 易得满足条件的二叉树的深度不是三层就是四层
  2. 四层的二叉树中,节点B、C、D各自共有两种可能,分别是A、B、C的左孩子或者右孩子,所以共有2 * 2 * 2 = 8种
  3. 对于三层的情况,我们可以将B固定住然后数一数,共有 6 种情况
    在这里插入图片描述
  4. 所以共有 8 + 6 = 14种

选择题12

在这里插入图片描述
解: 根据完全二叉树的性质完全二叉树的深度为log(n+1)向上取整,所以选D

选择题13

在这里插入图片描述

解:本题考查完全二叉树的性质,深度等于 log(n+1)向上取整 或 log(n) + 1 向下取整,所以选B

选择题14

在这里插入图片描述

解:层序遍历的模版就是 首先将根节点入队列然后每次将 出队节点的左右子节点入队列,这样可以保证一定是一层一层进行遍历的,所以本题选择D

选择题15

在这里插入图片描述

解:中序遍历的遍历优先度是 左儿子 > 根节点 > 右儿子,根据题目描述值的大小关系为 左 < 根 < 右,故选择 A 中序遍历

选择题16

在这里插入图片描述

解:如果根节点从1开始编号,那么n 号节点的左儿子的编号就是 2n,右儿子就是 2n+1,x号节点的父亲则是 x / 2,所以98 / 2 = 49,所以选C

选择题17

在这里插入图片描述
解:A、B、D选项都是C选项的一种特殊的情况,也就说满足A、B、D也就一定满足C选项,所以本题一定选C

在这里插入图片描述

无论是没有左孩子,还是没有右孩子,还是只有一个节点 都满足 前序遍历和后序遍历刚好相反的,所以不可能选他们当中的一个选项,所以选C。

选择题18

在这里插入图片描述
解:

  1. 1001个节点,由于是奇数个节点且是一个完全二叉树,所以没有度为1的节点,n1 = 0
  2. 又根据公式 n0 = n2 + 1(n0、n1、n2分别代表度为0、1、2的节点)
  3. 所以2*n0 - 1 = 1001
  4. 所以n0 = 501,选C

补充:如果节点是偶数的,那么只有一个度为1的节点

选择题19

在这里插入图片描述
解:

  1. 二叉树指的是树的度最高为2,不是深度为2,所以A选项错误
  2. B选项除了根节点,每一个节点都需要一条边连向另一个节点
  3. C选项为满二叉树的性质
  4. 二叉链代表着每个节点可以获取最多两个节点的信息,比如左右孩子表示法等等,三叉链则比如孩子双亲表示法等等,所以D选项正确

选择题20

在这里插入图片描述

解:当这棵树按照完全四叉树的排列顺序排列时此时深度最小,在满四叉树中,节点总数为 40 + 41+ … + 4h-1,根据等比数列求和可以得出 节点总数 = (4h- 1) / 3

当深度为5时,满四叉树的节点总数是 341,当深度为6时,满四叉树的节点总数是1365,所以1000个节点的最小深度就是 6,所以选B

选择题21

在这里插入图片描述
解:

  1. 由题目可得:n3 = 2, n2 = 1, n1 = 2
  2. 设N为节点总数,则 n0 + n1 + n2 + n3 = N
  3. N个节点共有 N - 1条边,0*n0 + 1*n1 + 2*n2 + 3*n3 = N - 1
  4. 解得 n0 = 6,所以选C

选择题22

在这里插入图片描述

解:在树中,从根节点到叶子结点有且只有一条通道,所以选择A选项

实现二叉树的基本操作

实现二叉树的基本操作,完成下列函数

public class BinaryTree {

    static class TreeNode {
        public char val;
        public TreeNode left;//左孩子的引用
        public TreeNode right;//右孩子的引用

        public TreeNode(char val) {
            this.val = val;
        }
    }


    /**
     * 创建一棵二叉树 返回这棵树的根节点
     *
     * @return
     */
    public TreeNode createTree() {

    }

    // 前序遍历
    public void preOrder(TreeNode root) {
    }

    // 中序遍历
    void inOrder(TreeNode root) {
    }

    // 后序遍历
    void postOrder(TreeNode root) {
    }

    public int nodeSize;

    /**
     * 获取树中节点的个数:遍历思路
     */
    void size(TreeNode root) {
    }

    /**
     * 获取节点的个数:子问题的思路
     *
     * @param root
     * @return
     */
    int size2(TreeNode root) {
    }


    /*
     获取叶子节点的个数:遍历思路
     */
    public int leafSize = 0;

    void getLeafNodeCount1(TreeNode root) {
    }

    /*
     获取叶子节点的个数:子问题
     */
    int getLeafNodeCount2(TreeNode root) {
    }

    /*
    获取第K层节点的个数
     */
    int getKLevelNodeCount(TreeNode root, int k) {
    }

    /*
     获取二叉树的高度
     时间复杂度:O(N)
     */
    int getHeight(TreeNode root) {
       
    }


    // 检测值为value的元素是否存在
    TreeNode find(TreeNode root, char val) {
        
        return null;
    }

    //层序遍历
    void levelOrder(TreeNode root) {
        
    }


    // 判断一棵树是不是完全二叉树
    boolean isCompleteTree(TreeNode root) {
        return true;
    }
}

没有提到的都在下方这个文章里有
二叉树相关oj题


createTree函数里可以自由手动创建一颗自己想要的树,比如我创建了如下图的二叉树
在这里插入图片描述

在这里插入图片描述


查询二叉树当中节点的个数

遍历思想

思路:遍历思想,遍历整个二叉树。

在这里插入图片描述

子问题思想

思路:利用子问题思想
在这里插入图片描述


获取叶子节点的个数

遍历思想

在这里插入图片描述

子问题思想

在这里插入图片描述

检测值为value的元素是否存在

在这里插入图片描述

获取一颗二叉树的高度

在这里插入图片描述


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

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

相关文章

[数据集][图像分类]熊分类数据集309张5类别黑熊泰迪北极熊等

数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;309 分类类别数&#xff1a;5 类别名称:["black","grizzly","panda","polar","teddy"] 每个类别图…

大数据之Flink(五)

15、Flink SQL 15.1、sql-client准备 启用Hadoop集群(在Hadoop100上) start-all.sh启用yarn-session模式 /export/soft/flink-1.13.0/bin/yarn-session.sh -d启动sql-client bin/sql-client.sh embedded -s yarn-sessionsql文件初始化 可以初始化模式、环境&#xff08;流/批…

BUUCTF(34)特殊的 BASE64

使用pycharm时&#xff0c;如果想把代码撤销到之前的状态可以用 Ctrlz 如果不小心撤销多了&#xff0c;可以用 CtrlShiftZ 还原&#xff0c; 别傻傻的重新敲了 BUUCTF在线评测 (buuoj.cn) 查看字符串&#xff0c;想到base64的变表 这里用的c的标准程序库中的string&#xff0…

JS_循环结构

目录标题 while结构for循环foreach循环 while结构 几乎和JAVA一致 代码 <script> /* 打印99 乘法表 */ var i 1; while(i < 9){ var j 1; while(j < i){ document.write(j"*"i""i*j" "); j; } document.write("<hr/…

《机器学习》数据预处理 删除、替换、填充 案例解析及实现

目录 一、了解数据清洗 1、什么是数据清洗 2、数据清洗步骤 1&#xff09;缺失值处理 2&#xff09;异常值处理 3&#xff09;重复值处理 4&#xff09;格式修正 5&#xff09;数据一致性检查 6&#xff09;数据类型转换 二、数据清洗用法 1、有如下文件内容 2、完…

前向渲染路径

1、前向渲染路径处理光照的方式 前向渲染路径中会将光源分为以下3种处理方式&#xff1a; 逐像素处理&#xff08;需要高等质量处理的光&#xff09;逐顶点处理&#xff08;需要中等质量处理的光&#xff09;球谐函数&#xff08;SH&#xff09;处理&#xff08;需要低等质量…

线程的四种操作

所属专栏&#xff1a;Java学习 1. 线程的开启 start和run的区别&#xff1a; run&#xff1a;描述了线程要执行的任务&#xff0c;也可以称为线程的入口 start&#xff1a;调用系统函数&#xff0c;真正的在系统内核中创建线程&#xff08;创建PCB&#xff0c;加入到链…

C++17: 用折叠表达式实现一个IsAllTrue函数

前言 让我们实现一个 IsAllTrue 函数&#xff0c;支持变长参数&#xff0c;可传入多个表达式&#xff0c;必须全部计算为true&#xff0c;该函数才返回true。 本文记录了逐步实现与优化该函数的思维链&#xff0c;用到了以下现代C新特性知识&#xff0c;适合对C进阶知识有一定…

2025最新:如何打造公司财务管理系统?Java SpringBoot实现,一步到位管理企业财务!

✍✍计算机毕业编程指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java…

STM32F407VET6开发板RT-Thread的移植适配

前言 最近购买了一块 STM32F407VET6开发板【魔女】&#xff0c;http://www.stm32er.com/ 通过原理图了解到&#xff0c;开发板板载 CMSIS-DAP 调试下载口&#xff0c;例程部分大部分以裸机程序为主 目标&#xff1a;打算移植适配到 RT-Thread 适配 RT-Thread RT-Thread 支持…

基于准静态自适应环型缓存器(QSARC)的taskBus万兆吞吐实现

文章目录 概要整体架构流程技术名词解释技术细节1. 数据结构2. 自适应计算队列大小3. 生产者拼接缓存4. 高效地通知消费者 小结1. 性能表现情况2. 主要改进3. 源码和发行版 概要 准静态自适应环形缓存器&#xff08;Quasi-Static Adaptive Ring Cache&#xff09;是taskBus用于…

【Python报错已解决】 No Python at ‘C:\Users...\Python Python39\python.exe’

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;检查Python安装路径2.2 …

苍穹外卖随记(一)

黑马苍穹外卖逻辑和细节的问题和解决 1.后端查询到员工的日期信息&#xff0c;将信息进行json化传给前端时发生&#xff1a;前端收到的是不标准的日期json串。 解决&#xff1a;1.注解进行json格式化&#xff08;JsonFormat&#xff09;2. 在spring MVC中&#xff0c;通过消息…

如何验证VMWare WorkStation的安装?

如何验证VMWare WorkStation的安装&#xff1f; 右击"网络"&#xff0c;点击 打开"网络和Internet设置"&#xff0c;点击更改适配器选项&#xff0c;如果出现VMNet1和VMNet8&#xff0c;则说明安装成功。

内网穿透(cpolar实现)

目录 一、介绍 二、内网穿透工具cpolar实现 1.下载与安装 2.cpolar指定authtoken 3.获取临时域名 4.验证临时域名有效性 一、介绍 内网穿透&#xff0c;即 NAT 穿透&#xff08;Network Address Translation Traversal&#xff09;&#xff0c;是一种网络技术&#xff0…

Python爬虫使用实例-wallpaper

1/ 排雷避坑 &#x1f95d; 中文乱码问题 print(requests.get(urlurl,headersheaders).text)出现中文乱码 原因分析&#xff1a; <meta charset"gbk" />解决方法&#xff1a; 法一&#xff1a; response requests.get(urlurl,headersheaders) response.en…

java基础-IO(4)管道流 PipedOutputStream、PipedInputStream、PipedReader、PipedWriter

管道 提到管道&#xff0c;第一印象就是水管或者地下管道&#xff0c;一节接着一节&#xff0c;形如下图。 管道流 "流"从上一个管道 ——-> 下一个管道。又细分为字节流和字符流。 字节流&#xff08;PipedOutputStream、PipedInputStream&#xff09; 如果…

SSM框架介绍

SSM通常指的是三个开源框架的组合&#xff0c;即Spring、SpringMVC&#xff08;Spring Web MVC&#xff09;和MyBatis&#xff0c;这三个框架经常一起使用来开发Java企业级应用&#xff0c;特别是在Web应用开发中非常流行。 SSM框架介绍 Spring 简介&#xff1a;Spring是一个…

谷粒商城のNginx

文章目录 前言一、Nginx1、安装Nginx2、相关配置2.1、配置host2.2、配置Nginx2.3、配置网关 前言 本篇重点介绍项目中的Nginx配置。 一、Nginx 1、安装Nginx 首先需要在本地虚拟机执行&#xff1a; mkdir -p /mydata/nginx/html /mydata/nginx/logs /mydata/nginx/conf在项目…

ModuleNotFoundError: No module named ‘mmcv.transforms‘

不得已的解决方法&#xff1a; mmcv升级到2.0.0即可解决 升级后自然又面临一系列不兼容问题&#xff01; 官方文档查漏补缺