2024.06.21 刷题日记

101. 对称二叉树

判断是否对称,检查 root->left->val == root->right->val,接着进行递归检查对称位置:

class Solution {
public:// 传入对称位置的两个对称位置bool isMirror(TreeNode* left, TreeNode* right) {if (!left && !right)return true;if (!left || !right)return false;if (left->val != right->val)return false;return isMirror(left->left, right->right) &&isMirror(left->right, right->left);}bool isSymmetric(TreeNode* root) {if (!root)return true;return isMirror(root->left, root->right);}
};

543. 二叉树的直径

求二叉树的直径,就是在求当前节点左子树的深度和右子树的深度,两者一加,然后求最大值就可以了:

class Solution {
private:int maxDiameter = 0;int maxDepth(TreeNode* node) {if (!node)return 0;int leftMax = maxDepth(node->left);int rightMax = maxDepth(node->right);maxDiameter = max(leftMax + rightMax, maxDiameter);return max(leftMax, rightMax) + 1;}public:int diameterOfBinaryTree(TreeNode* root) {maxDepth(root); // 开始递归计算深度,并更新直径return maxDiameter;}
};

102. 二叉树的层序遍历

这个就是 bfs,直接利用队列:

class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {deque<TreeNode*> que; // 性能好if (!root)return {};vector<vector<int>> ans;vector<int> ansi;que.push_back(root);while (!que.empty()) {// 一次处理一层int levelSize = que.size();for (int i = 0; i < levelSize; i++) {TreeNode* temp = que.front();que.pop_front();ansi.push_back(temp->val);if (temp->left)que.push_back(temp->left);if (temp->right)que.push_back(temp->right);}ans.push_back(std::move(ansi));}return ans;}
};

108. 将有序数组转换为二叉搜索树

这道题的思路是,直接找数组的中间节点为根节点,这把数组分为两部分,然后递归创建二叉树:

class Solution {
public:TreeNode* sortedArrayToBST(vector<int>& nums) {return createBST(nums, 0, nums.size() - 1);}TreeNode* createBST(const vector<int>& nums, int left, int right) {if (left > right) {return nullptr; }int mid = left + (right - left) / 2;TreeNode* node = new TreeNode(nums[mid]);node->left = createBST(nums, left, mid - 1);node->right = createBST(nums, mid + 1, right);return node;}
};

98. 验证二叉搜索树

依然是递归的思路:每次将当前节点的值作为验证左子树的最大值,作为验证右子树的最大值:

class Solution {
public:bool isValidBST(TreeNode* root) {return isValidBSTHelper(root, LONG_MIN, LONG_MAX);}private:bool isValidBSTHelper(TreeNode* node, long minVal, long maxVal) {if (!node)return true;if (node->val <= minVal || node->val >= maxVal)return false;return isValidBSTHelper(node->left, minVal, node->val) &&isValidBSTHelper(node->right, node->val, maxVal);}
};

230. 二叉搜索树中第K小的元素

这是搜索树,而搜索树的中序遍历顺序就是有序,因此可以中序遍历此树,然后将第 k 个值赋给变量 result ,然后返回:

class Solution {
public:int kthSmallest(TreeNode* root, int k) {int count = 0; int result = 0;inorder(root, k, count, result);return result;}private:void inorder(TreeNode* node, int k, int& count, int& result) {if (!node)return;// 遍历左子树inorder(node->left, k, count, result);// 访问当前节点++count;if (count == k) {result = node->val; return;  }// 遍历右子树inorder(node->right, k, count, result);}
};

总结

  1. 对称二叉树 (LeetCode 101):

    • 通过递归检查树的左右子树是否是镜像对称的。这涉及到对树的每个节点进行比较。
  2. 二叉树的直径 (LeetCode 543):

    • 计算每个节点的左右子树的最大深度,然后用它们的和更新最大直径。这也是通过递归实现的。
  3. 二叉树的层序遍历 (LeetCode 102):

    • 使用队列进行广度优先搜索(BFS),一层层地处理树中的每个节点。
  4. 将有序数组转换为二叉搜索树 (LeetCode 108):

    • 通过递归选择数组的中间元素作为树的节点,以此来保证树的平衡。
  5. 验证二叉搜索树 (LeetCode 98):

    • 利用递归和范围限制(最小值和最大值)来确保所有的节点符合二叉搜索树的性质。
  6. 二叉搜索树中第K小的元素 (LeetCode 230):

    • 通过中序遍历来访问节点,因为中序遍历二叉搜索树会按照元素的升序进行。

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

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

相关文章

设计模式2-面向对象设计原则

设计模式-面向对象的设计原则 依赖倒置原则开闭封闭原则单一职责原则Liskov替换原则接口隔离原则面向对象优先使用对象组合&#xff0c;而不是类继承。封装变化点针对接口编程&#xff0c;而不是针对实现编程 变化是复用的天地。面向对象设计最大的优势在于抵御变化。 重新认识…

odoo 翻译字段sql查询语句

字段写法&#xff1a; name->>en_US 任务&#xff1a; 查询name字段中&#xff0c;包含ring的数据 SQL模糊查询 SELECT * FROM product_public_category WHERE name->>en_US LIKE %ring%; SQL精准查询 SELECT * FROM product_public_category WHERE name->…

深入解析MVC架构(Model-View-Controller Architecture)

目录 前言1. MVC架构概述1.1 模型&#xff08;Model&#xff09;1.1.1 数据管理1.1.2 业务逻辑 1.2 视图&#xff08;View&#xff09;1.2.1 数据展示1.2.2 用户界面设计 1.3 控制器&#xff08;Controller&#xff09;1.3.1 用户输入处理1.3.2 更新模型和视图 2. MVC架构的优缺…

主干网络篇 | YOLOv5/v7 更换主干网络之 ResNet50/ResNet101 | 对比实验必备

主干网络篇 | YOLOv5/v7 更换主干网络之 ResNet50/ResNet101 | 对比实验必备 1. 简介 ResNet 是近年来最受欢迎的深度卷积神经网络架构之一&#xff0c;它以其优异的性能和鲁棒性而著称。ResNet50 和 ResNet101 是 ResNet 家族中最常用的两个模型&#xff0c;它们分别具有 50…

【深度学习】stable-diffusion-webui AUTOMATIC1111 的参数解释翻译

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Command-Line-Arguments-and-Settings 参数命令值默认值描述-h, --helpNoneFalse显示帮助信息并退出–exit安装后终止–data-dirDATA_DIR./存储所有用户数据的基本路径–configCONFIGconfigs/stable-diffusion/…

易管理工厂设备日志采集工具

免费试用下载: Gitee下载 最新版本 优势: A. 开箱即用. 解压直接运行.不需额外安装. B. 批管理设备. 设备配置均在后台管理. C. 无人值守 客户端自启动,自更新. D. 稳定安全. 架构简单,内存占用小,通过授权访问.

通过python脚本采集网络流量

#!/usr/bin/python # -*- coding:utf-8 -*- psutil模块是一个跨平台的获取进程和系统应用情况&#xff08;CPU&#xff0c;内存&#xff0c;磁盘&#xff0c;网络&#xff0c;传感器&#xff09;的库。 该模块用于系统监控、限制进程资源和运行进程的管理等方面。 网络信息 ps…

反激开关电源输出假负载

1、为何需要假负载&#xff1f; 开关电源芯片的占空比最小不可能做到0%&#xff0c;都有一个最小导通时间&#xff0c;不过最小导通时间&#xff0c;在规格书中&#xff0c;不一定给出来 注意&#xff1a;如果没有最小导通时间&#xff0c;就相当于芯片都停止输出了&#xff…

29-Linux--守护进程

一.基础概念 1.守护进程&#xff1a;精灵进程&#xff0c;在后台为用户提高服务&#xff0c;是一个生存周期长&#xff0c;通常独立于控制终端并且周期性的执行任务火处理事件发生 2.ps axj&#xff1a;查看守护进程 3.进程组&#xff1a;多个进程的集合&#xff0c;由于管理…

Flask之模板

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、模板的基本用法 1.1、创建模板 1.2、模板语法 1.3、渲染模板 二、模板辅助工具 2.1、上下文 2.2、全局对象 2.3、过滤器 2.4、测试…

小米测开二面—80min中核

小米测开二面—80min中核 3.28 无自我介绍直接开问&#xff01;你的第一份实习是一个开发工作你的第二实习为什么又跑到测试了你的第一份实习遇到了哪些挑战你的逆向开发的开发目标是什么&#xff0c;使用了什么工具你最终开发落地是用在了什么方面上&#xff0c;比如机器人路…

什么是云主机?

云主机是新一代的主机租借服务&#xff0c;它整合了高性能服务器与优质网络带宽&#xff0c;有用处理了传统主机租借价格偏高、服务品良莠不齐等缺陷&#xff0c;可全面满意中小企业、个人站长用户对主机租借服务低本钱&#xff0c;高牢靠&#xff0c;易办理的需求。   关于大…

C语言入门系列:可迁移的数据类型

文章目录 1&#xff0c;精确宽度类型(exact-width integer type)2&#xff0c;最小宽度类型&#xff08;minimum width type&#xff09;3&#xff0c;最快的最小宽度类型&#xff08;fast minimum width type&#xff09;4&#xff0c;可以保存指针的整数类型。5&#xff0c; …

编译 CanMV 固件

前言 上一章节中已经搭建好了基于 CanMV 的 C 开发环境&#xff0c;这么一来便可以进行基于 C 语言和 FreeRTOS 的应用开发或者编译基于 MicroPython 语法的应用开发方式所需的 CanMV 固件&#xff0c;本 章就将带领读者体验一下 CanMV 固件的编译流程。 本章分为如下几个小节&…

为什么print语句被Python3遗弃?

在开发和维护python项目的时候发现经常有print语句报错&#xff0c;原因是python3放弃了print语句 print 语句 早就被列在了不可靠的语言特性列表中&#xff0c;例如 Guido 的“Python 之悔”&#xff08;Python Regrets&#xff09;演讲【1】&#xff0c;并计划在 Python 300…

Python期末复习:基础+数据结构

合法的标识符定义规则 以字母或下划线开头&#xff1a; 标识符必须以字母&#xff08;大写或小写&#xff09;或下划线 _ 开头。 后续字符可以是字母、数字或下划线&#xff1a; 后续字符可以是字母&#xff08;大写或小写&#xff09;、数字&#xff08;0-9&#xff09…

Unity 从0开始编写一个技能编辑器_02_Buff系统的Handler

BuffHandler可以是用于处理角色身上buff的Mono类&#xff0c;任何具备跟Buff交互的角色&#xff0c;都要携带这个BuffHandler脚本。如果你的Buff有额外的处理机制&#xff0c;比如互斥Buff&#xff08;如&#xff1a;免疫负面效果的霸体&#xff09;&#xff0c;需要在AddBuff方…

Anthropic AI模型Claude 3.5 Sonnet在Amazon Bedrock上正式可用

Claude 3.5 Sonnet是Anthropic最先进的Claude系列AI模型的新成员&#xff0c;比Claude 3 Opus更智能且价格只有其五分之一 北京——2024年6月21日 亚马逊云科技宣布&#xff0c;Anthropic最新、最强大的模型Claude 3.5 Sonnet现已在Amazon Bedrock上正式可用&#xff0c;该模型…

增强-MIGO物料消耗需要将物料描述写到会计凭证的摘要里面

财务比较闲提的需求&#xff0c;有些物料消耗需要将物料描述写到会计凭证的摘要里面&#xff0c; 找了一下增强点&#xff0c;随便搞了一下&#xff0c;可以了。

20240622 每日AI必读资讯

&#x1f916;力压GPT-4o&#xff01;新王Claude 3.5 Sonnet来了&#xff0c;直接免费可用 - 新模型在推理、知识和编码能力评估方面超越了以前的版本和竞争对手GPT 4o模型&#xff0c;同时其运行速度是Claude 3 Opus的两倍。 - 该模型可在http://Claude.ai和Claude iOS应用上…