练习题(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…

qwen-vl微调

1.数据格式转换 模版格式&#xff1a; [{"id": "identity_0","conversations": [{"from": "user","value": "你好"},{"from": "assistant","value": "我是Qwen-V…

C语言共享内存

windows下实现共享内存 进程A写入共享内存&#xff1a; #include <stdio.h> #include <windows.h>int main() {// 创建或打开共享内存对象HANDLE hMapFile CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,4096, // 内存大小&#xff0c;这里为4…

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

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

在Ubuntu 24.04 LTS (Noble Numbat)上搭建Kubernetes集群

准备工作 系统准备 主机和IP地址准备 ​编辑安装步骤 安装前准备 关闭防火墙 设置服务器时区 关闭 swap 分区 关闭SELinux 配置hosts配置文件 转发 IPv4 并让 iptables 看到桥接流量 每台机器设置hostname 安装容器运行时 安装Kubernetes 配置并安装apt包 初始…

Android Studio学习笔记——数据库存储

Android Studio学习笔记——数据库存储 6.1持久化技术简介6.2 文件存储将数据存储到文件中从文件中读取数据 6.3 SharedPreferences存储6.3.1 将数据存储到是SharedPreferences中6.3.2 从SharedPreferences中读取数据6.3.3 实现记住密码功能 6.4 SQLite数据库存储6.4.1 创建数据…

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

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

03_led_horse_run_v1 跑马灯

03_led_horse_run_v1 在Verilog中实现跑马灯通常涉及到使用一个计数器来控制LED灯的亮灭顺序。 跑马灯是一种常见的电子显示方式&#xff0c;它通过控制多个LED灯的顺序点亮&#xff0c;形成一种动态的视觉效果&#xff0c;看起来就像灯在“跑”一样。 更新 使用dip开关控制…

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

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

描述Nacos中服务发现的流程。

Nacos中服务发现的流程解析 在微服务的架构体系中&#xff0c;服务发现是一个至关重要的组成部分。它解决了服务提供者和消费者之间如何动态发现对方地址的问题&#xff0c;使得微服务之间的调用更加灵活和高效。在众多服务发现组件中&#xff0c;Nacos以其易用性、高性能和丰…

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

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

本周10个Github有趣项目WebLlama等

10个Github有趣的项目、工具和库 1、WebLlama Llama-3 网络Web代理&#xff0c;这是使用 Llama 3 构建的最强大的代理&#xff0c;通过聊天对话实现Web导航&#xff0c;可以按照说明浏览网页并与您交谈。 在Llama-3-8B-Web性能上超过了 GPT-4V&#xff08;*零样本&#xff09;…

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

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

【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台-源码下载与项目配置

基于.NET Framework 4.8 开发的深度学习模型部署测试平台,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等应用场景,同时支持图像与视频检测。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runtime以及OpenCV DNN,支持CPU、IGP…

用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;…

推荐收藏!40 道算法工程师必问的高频面试题!

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#xff1a…

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

笔记一 文章目录 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…