练习题(2024/5/3)

1对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

提示:

  • 树中节点数目在范围 [1, 1000] 内
  • -100 <= Node.val <= 100

递归思路:

  1. 定义递归的函数功能:
    • 比较左右子树是否对称
  2. 确定递归的结束条件:
    • 当左节点和右节点都为空时,说明对称,返回true
    • 当左节点和右节点其中一个为空时,说明不对称,返回false
    • 当左节点和右节点的数值不相等时,说明不对称,返回false
  3. 确定递归的返回值:
    • 返回左子树的左节点和右子树的右节点是否对称,以及左子树的右节点和右子树的左节点是否对称,两者都对称则返回true,否则返回false
  4. 在主函数中调用递归函数,判断整棵树是否对称。如果根节点为空,直接返回true;否则调用递归函数进行判断。

代码:

class Solution {
public:// 递归函数,用于比较左右子树是否对称bool compare(TreeNode* left, TreeNode* right) {// 首先排除空节点的情况if (left == NULL && right != NULL) return false;else if (left != NULL && right == NULL) return false;else if (left == NULL && right == NULL) return true;// 排除了空节点,再排除数值不相同的情况else if (left->val != right->val) return false;// 此时左右节点都不为空,且数值相同的情况,继续递归判断子树bool outside = compare(left->left, right->right);   // 左子树的左节点和右子树的右节点比较bool inside = compare(left->right, right->left);    // 左子树的右节点和右子树的左节点比较bool isSame = outside && inside;                    // 判断是否对称return isSame;                                      // 返回结果}// 主函数,判断整棵树是否对称bool isSymmetric(TreeNode* root) {if (root == NULL) return true;      // 空树也算对称return compare(root->left, root->right);  // 调用递归函数比较左右子树}
};

2完全二叉树的节点个数

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

示例 1:

输入:root = [1,2,3,4,5,6]
输出:6

示例 2:

输入:root = []
输出:0

示例 3:

输入:root = [1]
输出:1

提示:

  • 树中节点的数目范围是[0, 5 * 104]
  • 0 <= Node.val <= 5 * 104
  • 题目数据保证输入的树是 完全二叉树

思路:

通过递归的方式计算一棵树的节点数。在递归函数中,先判断当前节点是否为空,若为空则节点数为0;然后递归计算左右子树的节点数,并将左右子树节点数之和加上当前节点即为当前子树的节点数。主函数调用递归函数计算整棵树的节点数,并返回结果。

代码:

class Solution {
private:// 递归函数,用于获取以当前节点为根的子树的节点数int getNodesNum(TreeNode* cur) {// 当前节点为空,节点数为0if (cur == nullptr) return 0;// 递归获取左子树节点数int leftNum = getNodesNum(cur->left);      // 左// 递归获取右子树节点数int rightNum = getNodesNum(cur->right);    // 右// 当前节点的节点数为左右子树节点数之和加上当前节点int treeNum = leftNum + rightNum + 1;      // 中return treeNum;}
public:// 主函数,计算整棵树的节点数int countNodes(TreeNode* root) {// 调用递归函数获取整棵树的节点数return getNodesNum(root);}
};

2迭代思路:

使用了队列来按层遍历整棵树,并统计节点的数量。首先将根节点压入队列,然后进入循环,每次循环先获取当前层节点的数量,然后对当前层节点进行遍历,依次取出节点,统计节点数量,并将节点的左右子节点(如果存在)压入队列。最终返回统计的节点数量。

代码:

class Solution{public:int countNodes(TreeNode* root){queue<TreeNode* > que; // 定义一个队列用于存储节点if(root !=nullptr)  que.push(root); // 将根节点压入队列int result =0; // 记录节点数量while(!que.empty()){ // 循环直到队列为空int size=que.size(); // 获取当前队列大小,即当前层节点数量for(int i=0;i<size;i++){ // 对当前层节点进行遍历TreeNode* node=que.front(); // 取出队首节点que.pop(); // 弹出队首节点result++;   // 记录节点数量if (node->left) que.push(node->left); // 左子树不为空则压入队列if (node->right) que.push(node->right); // 右子树不为空则压入队列}}return result; // 返回节点数量}
};

3平衡二叉树

给定一个二叉树,判断它是否是 

平衡二叉树

平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。

  

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

示例 3:

输入:root = []
输出:true

思路:

通过递归的方式来判断一个二叉树是否是平衡二叉树。其中getHeight函数用来计算以当前节点为根节点的二叉树的高度,如果不是平衡二叉树则返回-1。在计算当前节点的高度时,先递归计算左子树和右子树的高度,如果左子树或右子树不是平衡二叉树(高度为-1),则直接返回-1。然后再判断左右子树的高度差是否大于1,如果是则返回-1,否则返回当前节点为根节点的二叉树的高度。最后在isBalanced函数中判断整棵树的高度是否为-1,如果是则返回false,否则返回true

代码:

class Solution {
public:// 返回以该节点为根节点的二叉树的高度,如果不是平衡二叉树则返回-1int getHeight(TreeNode* node) {if (node == NULL) {return 0; // 如果节点为空,返回高度0}int leftHeight = getHeight(node->left); // 获取左子树的高度if (leftHeight == -1) {return -1; // 如果左子树不是平衡二叉树,直接返回-1}int rightHeight = getHeight(node->right); // 获取右子树的高度if (rightHeight == -1) {return -1; // 如果右子树不是平衡二叉树,直接返回-1}if (abs(leftHeight - rightHeight) > 1) { // 如果左右子树高度差大于1,则不是平衡二叉树return -1;} else {return 1 + max(leftHeight, rightHeight); // 返回当前节点为根节点的二叉树的高度}}bool isBalanced(TreeNode* root) {int height = getHeight(root); // 获取二叉树的高度if (height == -1) {return false; // 如果高度为-1,则不是平衡二叉树} else {return true; // 否则是平衡二叉树}}
};

4使用唯一标识码替换员工ID

Employees 表:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| name          | varchar |
+---------------+---------+
在 SQL 中,id 是这张表的主键。
这张表的每一行分别代表了某公司其中一位员工的名字和 ID 。

EmployeeUNI 表:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| unique_id     | int     |
+---------------+---------+
在 SQL 中,(id, unique_id) 是这张表的主键。
这张表的每一行包含了该公司某位员工的 ID 和他的唯一标识码(unique ID)。

展示每位用户的 唯一标识码(unique ID );如果某位员工没有唯一标识码,使用 null 填充即可。

你可以以 任意 顺序返回结果表。

返回结果的格式如下例所示。

示例 1:

输入:
Employees 表:
+----+----------+
| id | name     |
+----+----------+
| 1  | Alice    |
| 7  | Bob      |
| 11 | Meir     |
| 90 | Winston  |
| 3  | Jonathan |
+----+----------+
EmployeeUNI 表:
+----+-----------+
| id | unique_id |
+----+-----------+
| 3  | 1         |
| 11 | 2         |
| 90 | 3         |
+----+-----------+
输出:
+-----------+----------+
| unique_id | name     |
+-----------+----------+
| null      | Alice    |
| null      | Bob      |
| 2         | Meir     |
| 3         | Winston  |
| 1         | Jonathan |
+-----------+----------+
解释:
Alice and Bob 没有唯一标识码, 因此我们使用 null 替代。
Meir 的唯一标识码是 2 。
Winston 的唯一标识码是 3 。
Jonathan 唯一标识码是 1 。

思路:

通过左连接(left join)将两个表Employees和EmployeeUNI进行关联查询,关联条件是Employees表中的id字段与EmployeeUNI表中的id字段相等。查询结果包括了EmployeeUNI表中的unique_id字段和Employees表中的name字段,以展示每位员工的唯一身份ID和姓名。

代码:

selectEmployeeUNI.unique_id, Employees.name
from Employees
left joinEmployeeUNI
onEmployees.id = EmployeeUNI.id

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

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

相关文章

(论文阅读-优化器)A Cost Model for SPARK SQL

目录 Abstract 1 Introduction 2 Related Work 3 Background and Spark Basics 4 Cost Model Basic Bricks 4.1 Cluster Abastraction and Cost Model Parameters 4.2 Read 4.3 Write 4.4 Shuffle Read 4.5 Broadcast 5 Modeling GPSJ Queries 5.1 Statistics and S…

QT+网络调试助手+TCP客户端

一、网络调试助手UI界面 编程主要思路&#xff1a; 首先将水平的控件 水平布局 &#xff0c;然后相对垂直的控件 垂直布局 &#xff0c;哪怕是底下的groupBox也需要和里面的内容 水平布局&#xff0c;然后最后框选全部 栅格布局。如果需要界面自适应窗口大小&#xff0c…

【白话机器学习系列】白话特征向量

白话特征向量 一个方阵 A A A 与列向量 v v v 的乘积会生成一个新的列向量。这个新向量通常与原向量有着不同的方向&#xff0c;矩阵在这里代表一个线性变换。然而&#xff0c;某些向量会保持其原始方向。我们称这种向量为矩阵 A A A 的特征向量&#xff08;eigenvector&…

一键 input 苹果 OpenELM,零门槛 Llama 3 教程,40+ 优质模型/数据集/教程,建议收藏!...

现在 AI 行业什么最火&#xff1f; 「大模型」一定仍然排在前三甲的位置。 自从 2022 年底 ChatGPT 面世以来&#xff0c;大模型在各行各业已经带来了太多的惊喜&#xff0c;应用场景愈发丰富&#xff0c;同时也带动了相关底层技术的普及与普适化。尤其是在开源模型繁荣发展之下…

C#核心之面向对象-多态

面向对象-多态 文章目录 1、Vob1、多态的概念2、多态的实现 2、抽象类和抽象方法1、抽象类2、抽象方法 3、接口1、接口的概念2、接口的声明3、接口的使用4、接口可以继承接口5、显示实现接口总结思考 电脑使用USB接口读取数据 4、密封方法 1、Vob 1、多态的概念 多态&#xf…

为什么选择OpenNJet?OpenNJet下一代云原生应用引擎!OpenNJet开发实战!

前言导读 在当今这个数字化转型加速的时代&#xff0c;云原生技术已成为企业和开发者构建现代应用的首选路径。OpenNJet作为新一代云原生应用引擎&#xff0c;在国内外技术社区受到了广泛关注。 本文将深入探讨OpenNJet的特点、优势以及在开发实践中的应用&#xff0c;带您全…

用python画一个正八边形

1 问题 使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个边长100的正八边形。 2 方法 1、利用for循环解决如何画出图形中相同的八条边的问题。 2、再利用turtle.fd()函数和turtle.seth()函数画出完整的图形。 代码清单 1 import turtleturtle.pensize(2)d0for i in r…

【系统架构师】-选择题(十三)

1、在某企业的营销管理系统设计阶段&#xff0c;属性"员工"在考勤管理子系统中被称为"员工"&#xff0c;而在档案管理子系统中被称为"职工"&#xff0c;这类冲突称为&#xff08; 命名冲突&#xff09;。 同一个实体在同系统中存在不同的命名&am…

智慧旅游引领未来风尚,科技助力旅行更精彩:科技的力量推动旅游业创新发展,为旅行者带来更加便捷、高效和智能的旅行服务

目录 一、引言 二、智慧旅游的概念与特点 &#xff08;一&#xff09;智慧旅游的概念 &#xff08;二&#xff09;智慧旅游的特点 三、科技推动旅游业创新发展 &#xff08;一&#xff09;大数据技术的应用 &#xff08;二&#xff09;人工智能技术的应用 &#xff08;…

【计算机科学速成课】笔记二

笔记一 文章目录 7.CPU阶段一&#xff1a;取指令阶段阶段二&#xff1a;解码阶段阶段三&#xff1a;执行阶段 8.指令和程序9.高级CPU设计——流水线与缓存10.早期编程方式11.编程语言发展史12.编程原理13.算法入门14.数据结构15.阿兰图灵 7.CPU CPU也叫中央处理器&#xff0c;…

在R的 RGui中,使用devtools 安装trajeR

创建于&#xff1a;2024.5.5 文章目录 1. 报错信息2. 尝试使用指定的清华镜像&#xff0c;没有解决3. 找到原因&#xff1a;官网把包删除了4. 尝试从网上下载&#xff0c;然后安装。没有成功5. 使用devtools安装5.1 尝试直接安装&#xff1a;install.packages("devtools&q…

关于YOLO8学习(四)模型转换为ncnn

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 简介 本文将会讲解: (1)如何通过PyCharm,进行pt模型的转换,最后输出一个适合手机端使用的模型 开发环境 win10、python 3.11…

C语言写一个终端进度条

C语言写一个终端进度条 这个功能挺简单的&#xff0c;主要有以下两点&#xff1a; 如何获取终端宽度如何让字符在原地闪烁 如何获取终端宽度 这里用到了设备控制接口函数ioctl()&#xff0c;下面简单的介绍一下这个函数的用法&#xff1a; ioctl是一个在Unix和类Unix系统中…

零基础学习数据库SQL语句之查询表中数据的DQL语句

是用来查询数据库表的记录的语句 在SQL语句中占有90%以上 也是最为复杂的操作 最为繁琐的操作 DQL语句很重要很重要 初始化数据库和表 USE dduo;create table tb_emp(id int unsigned primary key auto_increment comment ID,username varchar(20) not null unique comment…

glob库和split函数的用法

dir为一个文件夹&#xff0c;存放着三张jpg格式的图像 import glob dir rD:\My Data\Figure image_DCE_files glob.glob(f{dir}/*.jpg) image_DCE_files glob库可以获取文件夹下为个文件的绝对路径,会保存到一个列表中 获取的路径可以拆分为列表 image_DCE_files[1].split(…

HTTP常见面试题(一)

3.1 HTTP 常见面试题 HTTP基本概念 HTTP 是超文本传输协议&#xff0c;也就是HyperText Transfer Protocol。 HTTP 的名字「超文本协议传输」&#xff0c;它可以拆成三个部分&#xff1a; 超文本 传输 协议 HTTP 是一个用在计算机世界里的协议。它使用计算机能够理解的语…

Lora训练笔记1——快速上手

准备工具 AKI大佬的整合包&#xff0c;一键解压即可。 度盘链接 提取码&#xff1a;p8uy 图片预处理 图片预处理&#xff1a;以一定规则裁剪原始的训练素材图片&#xff0c;并进行打标处理。 新建两个文件夹 input&#xff1a;存放原始图片的文件夹 preprocess-output:…

西湖大学赵世钰老师【强化学习的数学原理】学习笔记-1、0节

强化学习的数学原理是由西湖大学赵世钰老师带来的关于RL理论方面的详细课程&#xff0c;本课程深入浅出地介绍了RL的基础原理&#xff0c;前置技能只需要基础的编程能力、概率论以及一部分的高等数学&#xff0c;你听完之后会在大脑里面清晰的勾勒出RL公式推导链条中的每一个部…

OpenCV如何使用 GDAL 读取地理空间栅格文件(72)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV的周期性噪声去除滤波器(70) 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目录 目标 代码&#xff1a; 解释&#xff1a; 如何使用 GDAL 读取栅格数据 注意 …

C++进阶----多态

1.多态的概念 1.1 概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同类型的对象去完成时会 产生出不同的状态。 举个例子&#xff1a;比如有一个基类Animal&#xff0c;它有两个子类Dog和Cat。每个…