一些二叉树相关面试题

news2024/11/25 8:15:07

在这里插入图片描述

文章目录

  • 1. 对折
  • 2. 判断是否是平衡二叉树
  • 3. 判断是否是搜索二叉树
  • 4. 二叉树的直径
  • 5. 寻找最大二叉搜索树
  • 6. 用递归套路判断是否是完全二叉树
  • 7. 派对的最大快乐值

1. 对折

在这里插入图片描述
这个大家可以自己用纸对折一下,我这里就简单的说一下:
在这里插入图片描述
这是我们第一次对折的情况。然后我们进行第二次对折:
在这里插入图片描述
这是我们第二次对折,我们再第三次对折:
在这里插入图片描述
如果我们把它转换成树的形状,我们可以这样:
在这里插入图片描述
如果我们想从上到下打印,其实就是中序遍历。

代码实现
从上图中我们可以发现一些规则:1. 头结点的凹的。2. 所有左子树的根是凹的,所有右子树的根是凸的。3. 对折几次就有几层
在这里插入图片描述
这个打印函数第一个参数说明当前是第几层,第二个参数是对折了几次(总共有几层),第三个参数意思是:当前结点的凹的话,down=true,如果是凸的话,down=false

在这里插入图片描述
如果i>N的话说明超过了总层数,就返回。
我们先往左边递归,当递归到左边最后一个的时候,返回,然后打印此时的down。再往右边递归,形成一个中序遍历。

2. 判断是否是平衡二叉树

在这里插入图片描述
难度 简单 题目链接

解题思路:
我们要判断一棵树是否是平衡二叉树,我们就要用一些变量来记录它的状态。在平衡二叉树中,我们可以用高度来衡量。
第一步:我们用结构体先定义一个信息体
在这里插入图片描述
一个记录当前结点的高度,一个记录这个树是否平衡。

第二步:判断是不是空树
在这里插入图片描述
如果是空树,我们就返回true,高度为0。不为空,就递归到左子树和右子树。

第三步:递归回来,判断此树是否为平衡二叉树
在这里插入图片描述
我们先认为它是平衡的,如果子树不满足条件的话,就设置成false。然后返回此树的一个情况。
在这里插入图片描述
在主函数直接返回这个树的一个平衡状态就行了。

3. 判断是否是搜索二叉树

在这里插入图片描述
难度 中等 题目链接

解题思路:
那么我们要判断是否是搜索二叉树,也可以定义一个信息体来记录一些条件信息。这里,我们要找左子树的最大值和右子树的最小值。但是递归需要传递的信息是一样的,所以不论是左子树还是右子树,我们都把两边的最小值和最大值找出来。
在这里插入图片描述
在这里插入图片描述
这里空树不知道返回什么,我们就返回空。然后返回到上层的时候,再做处理。当递归回来的时候,我们就要判断当前结点为根的树是否是搜索二叉树:
在这里插入图片描述
然后,我们再把以当前结点为根的树的最大值和最小值算出来返回。
在这里插入图片描述

4. 二叉树的直径

在这里插入图片描述
难度 简单 题目链接

示例:
在这里插入图片描述
这道题首先分几种情况:
第一种情况:和根结点无关
在这里插入图片描述
这种情况最大距离是在左子树或右子树中。

第二种情况:和根结点有关
在这里插入图片描述
这种情况的最大距离是:左子树的高度+右子树的高度。

代码实现:
在这里插入图片描述
首先还是先构造出信息体:最大距离和高度
在这里插入图片描述
当递归回来时,我们判断三种可能性:
在这里插入图片描述
选出这三种可能性最大的那个:
在这里插入图片描述
最后把max和高度求出来,然后返回:
在这里插入图片描述

5. 寻找最大二叉搜索树

这道题是什么意思,举个例子大家看一下:
在这里插入图片描述
这样的一个树,它自己本身不是一颗搜索二叉树,但是它的左子树和右子树是搜索二叉树,它的左子树的结点是4,右子树的结点是3。所以最大搜索二叉树结点个数就是4。

解题思路:
情况一:最大二叉搜索树不是以此结点为根

那么最大二叉搜索树就在此结点左子树或右子树中。

情况二:最大二叉搜索树是以此结点为根
那么我们首先要判断:
1.左子树和右子树是否是二叉搜索树。
2.左子树的max<x,右子树的min>x。
3.左子树的size+右子树的size+自己

下面我们可以创建一个信息体:
在这里插入图片描述
这里的第一个其实可以省略,如果整棵树的个数和最大二叉搜索树的个数相等,就说明此树是二叉搜索树。我们就可以简写:
在这里插入图片描述
然后继续按照之前的套路:
在这里插入图片描述
当递归回来时,我们把以此根为树的四个信息计算出来,然后返回。
在这里插入图片描述
这三个信息比较简单,我们还差最大二叉搜索树的个数:
在这里插入图片描述
然后比较这三种情况,最大的返回。
在这里插入图片描述

6. 用递归套路判断是否是完全二叉树

在这里插入图片描述
难度 中等 题目链接

那么我们首先还是要把所有的可能性列举出来:
第一种情况:左子树是满二叉树,右子树是满二叉树,左子树高度==右子树高度
在这里插入图片描述
第二种情况:左子树是完全二叉树,右子树是满二叉树,左子树高度=右子树高度+1
在这里插入图片描述
第三种情况:左子树是满二叉树,右子树是满二叉树,左子树高度=右子树高度+1
在这里插入图片描述
第四种情况:左子树是满二叉树,右子树是完全二叉树,左子树高度==右子树高度
在这里插入图片描述
还是和前面一样,先写信息体:
在这里插入图片描述
然后就按照我们之前分析的情况来判断:
在这里插入图片描述

7. 派对的最大快乐值

题目:
一个公司现在要办party,你可以决定哪些员工来,哪些员工不来。
规则:
1.如果某个员工来了,那么这个员工的所有下级都不能来。
2.派对的整体快乐值是所有到场员工快乐值的累加。
3.你的目标是让派对的整体快乐值最大

给定一棵多叉树的头节点boss,请返回派对的最大快乐值

公司的每个员工都符合Employee类的描述。整个公司的人员结果可以看作是一颗标准的,没有环的多叉树。树的头结点是公司唯一的老板。除老板之外的每个员工都有唯一的直接上级。叶结点是没有任何下属的基层员工,除基层员工外,每个员工都有一个或多个直接下级

员工信息的定义如下:

//员工的信息定义
struct Employee
{
	int _happy;//这名员工可以带来的快乐值
	list<Employee> subordinates;//这名员工的直接下级
};

举个例子:
在这里插入图片描述
这是一颗多叉树,如果我们选了第一层的结点,第二层就不能选,但是可以选第三层。如果我们选择了第二层,就不能选第一层和第三层了。然后,根据这样的规则把选出所有人的最大值找出。

首先,我们分析可能性:
第一种情况:根结点来
根结点的happy值+下级成员不来的最大值
在这里插入图片描述
这里的意思就是x的happy+a不来的最大happy+a不来最大happy值+a不来最大happy值+c不来最大happy值。

第二种情况:根结点不来
把下级成员来的happy值和不来的happy值进行比较,选出最大的
在这里插入图片描述
这个意思是max(a来,a不来)+max(b来,b不来)+max(c来,c不来)。

代码实现:
那么我们就先写信息体:其实就两个,来的最大值和不来的最大值
在这里插入图片描述
然后我们就需要写递归体:
在这里插入图片描述
这里是先遍历当前结点的所有下级员工,然后递归下去,把最下面一层的员工来与不来的最大值算出。然后就会递归上去,再统计出。
在这里插入图片描述
最后就得出答案。

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

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

相关文章

使用PHP做个图片防盗链(全网详解)

概念&#xff1a; 防盗链是一种防范网络图片、视频等资源被他人盗链&#xff08;直接在其它网站使用&#xff09;的技术。在网站上添加防盗链功能可以防止其他网站恶意盗取自己网站的图片等内容&#xff0c;减少带宽消耗和保护网站内容安全。通常实现防盗链的方式是在网站服务…

js 使用 Array.from 快速生成0~5,步进值为0.1的数组

一、我们平常用的比较多的方法是for循环生成 let data[] for(let i0;i < 51;i){data.push(i/10) }二、用Array.from生成 先来认识一下我们今天的主角&#xff01;&#xff01;&#xff01; 1、释义 Array.from() 方法从一个类似数组或可迭代对象创建一个新的&#xff0c…

SpringMVC(三):请求流程处理

一、引言&#xff1a; 如下是我画的一个简单的SpringMVC的请求流程图&#xff0c;接下来会通过请求流程图去进行源码分析。 [1 ] 当我们客户端发送请求时&#xff0c;Servlet会进行请求的解析&#xff0c;然后交给DispatcherServlet进行统一分发。[2] DispatcherServlet会根…

北京君正案例:超能面板PRO采用4英寸IPS超清多彩屏,值不值得买?

清晨&#xff0c;窗帘自动拉开&#xff0c;悦耳音乐缓缓响起&#xff0c;面包机、咖啡机自动工作&#xff0c;开启新一天。离家时&#xff0c;一键关掉所有灯光和家电&#xff0c;节能安全&#xff0c;手机上便可查看家里设备状态&#xff0c;不用担心门没锁、灯没关等问题。下…

ClickHouse入门详解

ClickHouse基础部分详解一、ClickHouse简介二、ClickHouse单机版安装2.1、ClickHouse安装前准备环境2.2、ClickHouse单机安装三、ClickHouse数据类型四、ClickHouse的表引擎一、ClickHouse简介 对于其他乱起八糟的简介&#xff0c;我就不写了&#xff0c;只写干货. ClickHouse总…

Lumen6 /laravel 框架路由请求实现token验证

版本 Lumen6.0 中文文档&#xff1a;https://learnku.com/docs/lumen/5.7/cache/2411 实现功能效果 1、使用缓存存储用户token 2、从请求头head 中获取用户token 3、返回指定的认证失败结构体 4、对指定的接口路由做身份验证 第一步&#xff1a;解除注释 注意&#xff1…

QML控件--Container

文章目录一、控件基本信息二、控件说明三、属性成员四、成员函数一、控件基本信息 Import Statement: import QtQuick.Controls 2.14 Since: Qt 5.7 Inherits: Control Inherited By: DialogButtonBox, MenuBar, SwipeView, and TabBar 二、控件说明 Container&#xff08;容…

网络安全之从原理看懂 XSS

01、XSS 的原理和分类 跨站脚本攻击 XSS(Cross Site Scripting)&#xff0c;为了不和层叠样式表(Cascading Style Sheets&#xff0c;CSS)的缩写混淆 故将跨站脚本攻击缩写为 XSS&#xff0c;恶意攻击者往 Web 页面里插入恶意 Script 代码&#xff0c;当用户浏览该页面时&…

【产品设计】删除确认文案,猛男落泪

使用各种系统时&#xff0c;都有各种删除操作&#xff0c;用户在删除时&#xff0c;很少关注文案写了什么&#xff0c;但这个文案往往让产品经理们殚精竭虑。怎么样才能写出合格的删除确认文案呢&#xff1f; 使用各种系统的时候&#xff0c;都有各种删除操作&#xff0c;作为用…

substrate中打印调试信息的多种方式详解

目录1. 获取substrate-node-template代码2. 添加一个用于测试的pallet至依赖到pallets目录3. log方式来输出信息3.1 将log依赖添到cargo.toml文件3.2 log-test/src/lib.rs修改call方法3.3 polkadot.js.调用测试函数do_something_log_test4. printable trait方式来输出信息4.1 首…

在 Rainbond 上使用在线知识库系统zyplayer-doc

zyplayer-doc 是一款适合企业和个人使用的WIKI知识库管理工具&#xff0c;提供在线化的知识库管理功能&#xff0c;专为私有化部署而设计&#xff0c;最大程度上保证企业或个人的数据安全&#xff0c;可以完全以内网的方式来部署使用它。 当然也可以将其作为企业产品的说明文档…

2023“认证杯”数学中国数学建模赛题浅析

2023年认证杯”数学中国数学建模如期开赛&#xff0c;本次比赛与妈杯&#xff0c;泰迪杯时间有点冲突。因此&#xff0c;个人精力有限&#xff0c;有些不可避免地错误欢迎大家指出。为了大家更方便的选题&#xff0c;我将为大家对四道题目进行简要的解析&#xff0c;以方便大家…

4.redis-主从复制

01-主从复制概述 单机redis存在的问题 ①硬盘故障, 导致数据丢失, redis不好用;②内存容量受限制, 单台服务器内存扩展有上限, 内存数据超过该上线, 该如何处理. 解决方案 1个master可以有多个slave, 1个slave只能对应1个master master: 主机, 可以读也可以写, 主要负责写. …

MySQL运维24-SHOW ENGINE INNODB STATUS解析

文章目录1、SHOW ENGINE INNODB STATUS概述2、信号量&#xff08;Semaphores&#xff09;2.1、信号量信息示例2.2、信号量信息说明2.3、知识点&#xff1a;CPU自旋(SPIN)2.3、信号量中的OS WAIT ARRAY INFO3、死锁3.1、死锁信息示例3.2、死锁信息说明4、外键冲突4.1、外键冲突信…

elementUI实现selecttree自定义下拉框树形组件

elementUI有select组件也有tree组件&#xff0c;但是就是没有下拉框和tree组件的结合体&#xff0c;那么这次我们就自定义一个。 效果图 引入组件 <select-tree ref"selectTree" treeChange"treeChangeFun" :dataArray"orgList" :value"…

【网络安全】文件上传漏洞及中国蚁剑安装

文件上传漏洞描述中国蚁剑安装1. 官网下载源码和加载器2.解压至同一目录并3.安装4.可能会出现的错误文件上传过程必要条件代码示例dvwa靶场攻击示例1.书写一句话密码进行上传2. 拼接上传地址3.使用中国蚁剑链接webshell前端js绕过方式服务端校验请求头中content-type黑名单绕过…

《花雕学AI》22:一种让AI模拟虚拟角色方法,足以更多创造力的ChatGPT角色扮演

一、什么是ChatGPT的角色扮演&#xff1f; ChatGPT是一种基于GPT-3模型的人机对话技术&#xff0c;它可以实现自然语言和计算机之间的交互。ChatGPT的角色扮演指的是让模型扮演一个虚构的人物&#xff0c;与用户进行设定好的对话。 例如&#xff0c;您可以让ChatGPT扮演一个关…

一文打通锁升级(偏向锁,轻量级锁,重量级锁)

前置知识&#xff1a;synchronized 在JavaSE1.6以前&#xff0c;synchronized都被称为重量级锁。但是在JavaSE1.6的时候&#xff0c;对synchronized进行了优化&#xff0c;引入了偏向锁和轻量级锁&#xff0c;以及锁的存储结构和升级过程&#xff0c;减少了获取锁和释放锁的性能…

Hbase1.1:Hbase官网、Hbase定义、Habse结构、Hbase依赖框架、Hbase整合框架

这里写自定义目录标题Hbase官网Hbase特点&#xff1a;大Hbase定义Habse结构Hbase依赖框架hadoopHbase整合框架PhoenixHiveHbase官网 Hbase官网地址 HBase是Hadoop database&#xff0c;一个分布式、可扩展的大数据存储。 当您需要对大数据进行随机、实时读/写访问时&#xf…

记录网关zuul处理跨域/XSS问题

一&#xff0c;疑问 1.之前遇到跨域问题是在NG中解决的&#xff0c;添加跨域请求头和域名配置。那么与网关处理跨域问题关系是什么&#xff0c;NG处理了&#xff0c;为什么还需要在网关中处理 二&#xff0c;前置知识 zuul概念与原理 zuul 的概念和原理 - 知乎 Zuul工作原…