LeetCode 第二十一天

530. 二叉搜索树的最小绝对差

注意掌握中序遍历的迭代写法。

class Solution {
public:int preValue = -1;int MinAbs = INT_MAX;void traversal(TreeNode* root){// 第一次写出新的递归题目 耶耶耶if (root == nullptr) return;traversal(root->left);// 上一章卡尔给出的好方法,如果第一次直接跳过,否则找到更小的值,用全局变量记录if (preValue != -1 && root->val - preValue < MinAbs){MinAbs = root->val - preValue;}preValue = root->val;traversal(root->right);}int getMinimumDifference(TreeNode* root) {// 递归写法// traversal(root);// return MinAbs;// 迭代写法 (中序遍历加一个当前节点-前一个结点的遍历)stack<TreeNode*> st;// 当前节点 TreeNode* cur = root;// 前一个结点TreeNode* pre = nullptr;int res = INT_MAX;while (cur != nullptr || !st.empty()){// 只要左边不为空,一直遍历到底if (cur){st.push(cur);cur = cur->left;}else{// 取出栈顶元素cur = st.top();st.pop();// 如果不是第一个节点,并且满足较小值比较if (pre != nullptr && cur->val - pre->val < res){res = cur->val - pre->val;}pre = cur;// 向右去遍历cur = cur->right;}}return res;}
};

501. 二叉搜索树中的众数

这题运用了许多的全局变量,解决了参数传递复杂的问题,在解题的过程中不失为一种好方法。

class Solution {
public:
// 全局大法好int count = 1;int MaxCount = 1;TreeNode* pre = nullptr;vector<int> res;void traversal(TreeNode* root){// 对本节点处理,如果为空,直接返回if (root == nullptr){return;}// 左traversal(root->left);// 中if (pre == nullptr){count = 1;}else if (pre->val == root->val){count++;}// root已经不等于前一个了,该洗牌了else{count = 1;}pre = root;// 大胆放心的放进去吧,反正前面的结果已成定局,后续如果还有更大的,先清空后加入if (count == MaxCount){res.push_back(root->val);}if (count > MaxCount){MaxCount = count;res.clear();//关键清空步骤res.push_back(root->val);}traversal(root->right);}vector<int> findMode(TreeNode* root) {traversal(root);return res;}
};

236. 二叉树的最近公共祖先

这题在没看题解之前是属于很难的题目,看完题解感觉能理解。递归采用有返回值的后序遍历递归,每次返回一个节点或者空值。开始判断如果根为空则返回空,如果遍历到p q节点,则提前返回。采用left和right变量存储每一层的返回值,如果左右子树均返回非空,则设法将本层节点一直返回到顶;否则返回不空的一边;否则返回null。这样就可以包含两种可能存在的情况。

class Solution {
public:TreeNode* traversal(TreeNode* root, TreeNode* p, TreeNode* q){// 这题卡哥讲的太牛逼了,我觉得也理解的很好// root为空终止,有返回值,返回root即nullif (root == nullptr) return root;// 遍历过程中找到p节点或者q节点,直接提前返回if (root == p || root == q) return root;// 后续遍历,记录下返回的东西TreeNode* left = traversal(root->left, p, q);TreeNode* right = traversal(root->right, p ,q);// 如果当前节点root两边的返回值不为空,证明这个节点为p q的最近公共祖先if (left && right){return root;}// 如果只有一边不为空,返回不为空的一边else if (!left && right){return right;}else if (left && !right){return left;}// 否则返回nullelse return nullptr;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {return traversal(root, p, q);}
};

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

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

相关文章

写静态页面——浮动练习

0、效果&#xff1a; 1、html代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>浮动…

Mongodb投射中的$slice,正向反向跳过要搞清楚

在投射中&#xff0c;使用$操作符和$elemMatch返回数组中第一个符合查询条件的元素。而在投射中使用$slice, 能够返回指定数量的数组元素。 定义 投射中使用$slice命令&#xff0c;指定查询结果中返回数组元素的数量。 语法 db.collection.find(<query>,{<arrayFi…

C++-类和对象(2)

目录 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 1.对象中包含类的各个成员 ​编辑 2.代码只保存一份&#xff0c;在对象中保存存放代码的地址 ​编辑 3.只保存成员变量&#xff0c;成员函数存放在公共的代码段 ​编辑…

C++进阶(八)红黑树

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、红黑树的概念二、红黑树的性质三、红黑树结构四、红黑树的插入操作1、情况一2、情况二3、…

stm32--simulink开发之--timer的学习

总体的参考链接是&#xff1a; https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ref/timer.html 输入&#xff1a; 1&#xff0c;配置项&#xff1a;Enable frequency input 缩写&#xff1a;freq conunt 说明&#xff1a;“freq count — Frequency…

【C++】构造函数和析构函数详解

目录 前言 类中的六个默认成员函数 构造函数 概念 特性 析构函数 概念 特性&#xff1a; 前言 类中的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编…

Python爬虫学习之scrapy库

一、scrapy库安装 pip install scrapy -i https://pypi.douban.com/simple 二、scrapy项目的创建 1、创建爬虫项目 打开cmd 输入scrapy startproject 项目的名字 注意:项目的名字不允许使用数字开头 也不能包含中文 2、创建爬虫文件 要在spiders文件…

qt setStyleSheet 设置多个属性{}之间用空格间隔

setStyleSheet 设置多个属性时&#xff0c;大属性之间不能用分号&#xff0c;用 空格进行间隔 pbtn1->setStyleSheet("QPushButton {background-color: rgb(4,138,224);font: bold 12pt;color: rgb(255,255,255);} QPushButton:hover,QPushButton:pushed {background-…

GPT等大语言模型是典型的人机环境交互、协同系统

GPT等大语言模型是一种典型的人机环境交互、协同系统&#xff0c;同时也是一种基于Transformer模型的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;使用了大规模的无监督预训练和有监督微调的方法进行训练。通过预训练和微调的方式来生成文本。GPT能够根据输入的文…

【Cookie反爬虫】某采购网站动态Cookie加点选验证码校验分析与实战

文章目录 1. 写在前面2. 请求分析3. JS反混淆4. 深度分析 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

字符串转换const char* , char*,QByteArray,QString,string相互转换,支持中文

文章目录 1.char * 与 const char * 的转换2.QByteArray 与 char* 的转换3.QString 与 QByteArray 的转换4.QString 与 string 的转换5.QString与const string 的转换6.QString 与 char* 的转换 在开发中&#xff0c;经常会遇到需要将数据类型进行转换的情况&#xff0c;下面依…

【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]

阅读导航 引言一、设计模式概念&#xff08;了解&#xff09;二、单例模式1. 饿汉模式&#xff08;1&#xff09;概念&#xff08;2&#xff09;模拟实现&#xff08;3&#xff09;优缺点&#xff08;4&#xff09;适用场景 2. 懒汉模式&#xff08;1&#xff09;概念&#xff…

金田金业教你如何看懂国际黄金价格走势图

对于黄金投资者来说&#xff0c;看懂国际黄金价格走势图是至关重要的。通过观察走势图&#xff0c;可以了解金价的实时动态&#xff0c;预测未来的走势&#xff0c;从而做出相应的投资决策。本文将详细解析如何看懂国际黄金价格走势图。 一、国际黄金价格走势图的基本构成 国…

【JavaEE】UDP协议与TCP协议

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

嵌入式学习记录15

结构体 struct 描述一些 基本数据类型不好描述的 &#xff1b;复杂的数据类型 就是要描述一类事物&#xff0c;需要从他的方方面面入手&#xff0c;而这些方面的数据类型又各不相同&#xff0c;这时需要整合在一起&#xff1b;就是结构体&#xff1b;而这个结构体相当于一个模…

NoSQL数据库简介

NoSQL数据库简介 Brief Introduction to NoSQL Databases By JacksonML 1. 什么是SQL&#xff1f; 在了解NoSQL之前&#xff0c;先简要介绍一下SQL。 SQL是 Structured Query Language&#xff08;结构化查询语言&#xff09;的缩写。 SQL在关系型数据中广泛使用&#xf…

字符串函数(2)

目录 字符串替换 将所有员工姓名中的字母“A”替换为“_” 消除空格数据 字符串截取 字符串截取操作 从指定位置截取到结尾 截取部分内容 截取每一位员工姓名的前三位字符 面试题&#xff1a;请问利用 Oracle 中的 substr() 函数进行截取时&#xff0c;字符串的索引是从…

从淘宝商品详情API看电商行业的数据价值

在电商行业&#xff0c;数据已经成为驱动业务增长的关键因素。淘宝作为中国电商市场的主要参与者&#xff0c;其商品详情原数据的API在电商行业中具有显著的重要性。本文将深入探讨这个话题&#xff0c;并阐述如何实现实时数据获取。 一、淘宝商品详情原数据API的重要性 提供…

大数据学习之Redis,十大数据类型的具体应用(三)

目录 3.7 Redis位图&#xff08;bitmap&#xff09; 概念 需求 是什么 说明 能干嘛? 基本命令 3.7 Redis位图&#xff08;bitmap&#xff09; 概念 由0和1状态表现的二进制位的bit数组 需求 用户是否登陆过&#xff1f;Y / N 广告是否被点击过&#xff1f; 钉钉打…

深入理解G0和G1指令:C++中的实现与激光雕刻应用

系列文章 ⭐深入理解G0和G1指令&#xff1a;C中的实现与激光雕刻应用⭐基于二值化图像转GCode的单向扫描实现⭐基于二值化图像转GCode的双向扫描实现⭐基于二值化图像转GCode的斜向扫描实现基于二值化图像转GCode的螺旋扫描实现基于OpenCV灰度图像转GCode的单向扫描实现基于Op…