【代码随想录二刷】Day21-二叉树-C++

news/2024/4/26 17:49:37/文章来源:https://blog.csdn.net/weixin_38255385/article/details/129140496

代码随想录二刷Day21

今日任务

530.二叉搜索树的最小绝对差
501.二叉搜索树中的众数
236.二叉树的最近公共祖先
语言:C++

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

链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/
递归

class Solution {
public:vector<int> res;void traversal(TreeNode* cur){if(cur == NULL) return;traversal(cur->left);res.push_back(cur->val);traversal(cur->right);}int getMinimumDifference(TreeNode* root) {traversal(root);int min = INT_MAX;for(int i = 1; i < res.size(); i++){min = min < res[i] - res[i - 1] ? min : res[i] - res[i - 1];}return min;}
};

迭代(非双指针)

class Solution {
public:vector<int> res;int getMinimumDifference(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur = root;while(cur != NULL || !st.empty()){if(cur != NULL){st.push(cur);cur = cur->left;}else{cur = st.top();st.pop();res.push_back(cur->val);cur = cur->right;}}int min = INT_MAX;for(int i = 1; i < res.size(); i++){min = min < res[i] - res[i - 1] ? min : res[i] - res[i - 1];}return min;}
};

迭代(双指针)

class Solution {
public:int res = INT_MAX;int getMinimumDifference(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur = root;TreeNode* pre = NULL;while(cur != NULL || !st.empty()){if(cur != NULL){st.push(cur);cur = cur->left; //左}else{cur = st.top();st.pop();if(pre) res = min(res, cur->val - pre->val); //中pre = cur;cur = cur->right; //右}}return res;}
};

501. 二叉搜索树中的众数

链接:https://leetcode.cn/problems/find-mode-in-binary-search-tree/
普通二叉树就用哈希表,然后按照出现次数从大到小排序
递归

class Solution {
public:vector<int> res;int curCount = 1;int maxCount = INT_MIN;TreeNode* pre = NULL;void traversal(TreeNode* cur){if(cur == NULL) return;traversal(cur->left);if(pre && pre->val == cur->val) curCount++;else curCount = 1;pre = cur;if(curCount == maxCount) res.push_back(cur->val);else if(curCount > maxCount){res.clear();maxCount = curCount;res.push_back(cur->val);}traversal(cur->right);}vector<int> findMode(TreeNode* root) {TreeNode* cur = root;traversal(cur);return res;}
};

迭代

class Solution {
public:int maxCount = INT_MIN;int curCount = 1;vector<int> res;vector<int> findMode(TreeNode* root) {if(root->left == NULL && root->right == NULL){res.push_back(root->val);return res;}TreeNode* cur = root;TreeNode* pre = NULL;stack<TreeNode*> st;while(!st.empty() || cur != NULL){// if(pre) cout << pre->val << " ";// else cout << "pre=NULL" << " ";// if(cur) cout << cur->val << endl;// else cout << "cur=NULL" << endl;if(cur != NULL){st.push(cur);cur = cur->left;}else{cur = st.top();st.pop();if(pre && pre->val == cur->val) curCount++;else curCount = 1;if(maxCount == curCount) res.push_back(cur->val);else if(maxCount < curCount){maxCount = curCount;res.clear();res.push_back(cur->val);}pre = cur;cur = cur->right;}}return res;}
};

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

链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == p || root == q || root == NULL) return root;TreeNode* left = lowestCommonAncestor(root->left, p, q); //leftTreeNode* right = lowestCommonAncestor(root->right, p, q); //rightif(left != NULL && right != NULL) return root; //rootif(left == NULL && right != NULL) return right;return left;}
};

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

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

相关文章

Apache Shiro与Spring Security对比

Apache Shiro VS Spring Security 1.Spring Security 官方文档&#xff1a;https://spring.io/projects/spring-security#overview介绍&#xff1a; Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr…

CAS底层原理及ABA问题

一、案例CAS是Java中Unsafe类里面的一个方法&#xff0c;它的全称是叫CompareAndSwap比较并交换的一个意思&#xff0c;它的主要功能是能够去保证在多线程的环境下对于共享变量修改的一个原子性。例如&#xff0c;比如说像这样一个场景&#xff0c;有一个成员变量state&#xf…

【分享】订阅卖家云集简云连接器同步销售出库数据至卖家云系统

方案场景 在企业进行数字化转型过程中&#xff0c;数据割裂是企业面临的最大困难&#xff0c;钉钉作为现企业流行的常用办公系统&#xff0c;与第三方ERP系统之间存在着数据割裂的现象&#xff0c;例如&#xff0c;钉钉与卖家云系统&#xff0c;企业员工原来的办公方式是在钉钉…

Vue基础14之TodoList组件自定义事件、全局事件总线、TodoList全局事件总线

Vue基础14TodoList-组件自定义事件先改Header和Footer子组件&#xff0c;List先不考虑App.vueMyHeader.vueMyFooter.vue全局事件总线实现思路正规写法main.jsApp.vueStudent.vueSchool.vue总结&#xff1a;全局事件总线&#xff08;GlobalEventBus&#xff09;TodoList案例&…

修复 K8s SSL/TLS 漏洞(CVE-2016-2183)指南

作者&#xff1a;老 Z&#xff0c;中电信数智科技有限公司山东分公司运维架构师&#xff0c;云原生爱好者&#xff0c;目前专注于云原生运维&#xff0c;云原生领域技术栈涉及 Kubernetes、KubeSphere、DevOps、OpenStack、Ansible 等。 前言 测试服务器配置 主机名IPCPU内存系…

5.10 BGP属性-MED

5.4.4配置BGP MED属性控制选路 1. 实验目的 熟悉BGP MED属性控制选路的应用场景掌握BGP MED属性控制选路的配置方法2. 实验拓扑 实验拓扑如图5-10所示: 图5-10:配置BGP MED属性控制选路 3. 实验步骤 (1) 网络连通性 R1…

QMap 判断是否value是否已经存在,结合Sleep函数测试

网上查了资料&#xff0c;基本说的都是通过.value判断是否已经之前的key值&#xff0c;但是尝试.了一下发现有.key的函数&#xff0c;对比着来就感觉这个函数是用来判断是否已经存在value值&#xff0c;于是开始百度也几乎没有找到相关资料&#xff0c;只好自己看官方文档&…

【高速电路01】高速电路入门知识

1.什么是高速电路&#xff1f; 一般情况下&#xff0c;我们在讨论电路的特性时&#xff0c;一个基本的常识&#xff0c;是认为一条导线上各处的电压&#xff08;或者说信号&#xff09;在同一时刻是相等的。 以上结论在低速电路时是没问题的&#xff0c;但是&#xff0c;实际…

R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作技术应用第一章、理论篇以问题导入的方式&#xff0c;深入掌握原理基础什么是MaxEnt模型&#xff1f;MaxEnt模型的原理是什么&#xff1f;有哪些用途&#xff1f;MaxEnt运行需要哪些输入文件…

【异常】记一次因注解@RestController没加(@RestController不会用),导致无法调用Controller层的方法

一、背景 我想要调用一个Controller&#xff0c;定义的内容如下 RequestMapping("/demo") public class demoController {GetMapping("/doSomething")public JSONObject doSomething() {JSONObject json new JSONObject();json.set("title", …

界面控件DevExpress WPF Pivot Grid——拥有强大多维数据分析能力!

界面控件DevExpress WPF的Pivot Grid组件是一个类似excel的数据透视表&#xff0c;用于多维数据分析和跨选项卡报表生成。它拥有众多的布局自定义选项&#xff0c;允许开发者完全控制其UI且以用户为中心的功能使其易于部署。PS&#xff1a;DevExpress WPF拥有120个控件和库&…

双因素方差分析全流程

上篇文章讲述了“单因素方差分析全流程总结”&#xff0c;单因素方差分析只是考虑了一个自变量&#xff08;定类&#xff09;与一个因变量&#xff08;定量&#xff09;之间的关系&#xff0c;但是在实际问题研究中可能研究两个或者几个因素与因变量之间的关系&#xff0c;例如…

核心技术: springboot 启动类加载时方法执行的几种实现方式, bean声明周期, 启动执行顺序

目录 1. 业务场景 -> 1.1 初始化操作 -> 1.2 业务操作 -> 1.3优势 2. 实现方式(多种方式,不同思想) -> 2.1 定时调度任务(常用四种方式 task ) --> 2.1.1 Timer(单线程) --> 2.1.2 scheduledExecutorService(多线程并发执行,线程池) --> 2.1…

linux部署zookeeper

linux部署zookeeper 1、单机部署zk ZooKeeper服务器是用Java创建的&#xff0c;它需要在JVM上运行&#xff0c;所以需要使用JDK1.6及以上版本&#xff0c;一般都是jdk1.8。 选择自己安装本地的jdk&#xff0c;而不是centos自带的openjdk。 查看本地安装的jdk&#xff1a; j…

【C++的OpenCV】第二课-CMake创建OpenCV项目

文章目录一、CMake是什么&#xff1f;1.1 基本概念1.2 CMake的优势二、使用Cmake构建一个OpenCV程序2.1 步骤&#xff08;a&#xff09;编写一个简单的OpenCV示例代码&#xff08;b&#xff09;创建一个Cmake文件&#xff08;c&#xff09;生成可执行文件&#xff08;d&#xf…

DAX 微信 markdown 编辑器

DAX 微信 markdown 编辑器 一、致谢 感谢开源项目&#xff1a; md wechat-format 感谢 WordPress 插件 Mine云点播 作者 mine27 的指导。 二、如何使用 打开如下地址&#xff0c;直接编辑&#xff0c;可以实时看到符合微信公众号排版的效果。 推荐访问&#xff1a;https://j…

线上问题诊断指南

内容概要 诊断工具介绍工具可用情况偶现或已现问题诊断思路 硬件资源观测 top top可以看整个系统cpu、内存的使用情况&#xff0c;以及在各个进程上的情况&#xff0c;如下&#xff1a; $ top top - 13:14:07 up 2 days, 6:38, 0 users, load average: 1.65, 0.59, 0.27…

只因小黑子:SVG

小黑子的SVG复习SFV画布1. 初始SVG2. SVG绘制矩形、圆形和椭圆形2.1 rect 矩形2.2 circle 圆形2.3 ellipse 椭圆4. SVG绘制线条、多边形和多线条4.1 line 线条4.2 polygon 多边形4.3 polyline 多线条5. SVG绘制文本 text6. SVG绘制路径 path7. SVG描边属性8. SVG 模糊和阴影效果…

vue3.2中使用swiper缩略图轮播教程

介绍 在vue3 中使用 swiper 实现缩略图的轮播图效果,具体如下图所示: 使用 切换到项目终端 ,输入命令 npm install swiper --save , 进行安装在 main.js里,引入 swiper.css并使用,具体代码如下;import {createApp } from vue import App from ./App.vue import router…

查询服务器tns文件路径,oracle数据库tns配置方法详解

查询服务器tns文件路径,oracle数据库tns配置方法详解 TNS简要介绍与应用 Oracle中TNS的完整定义&#xff1a;transparence Network Substrate透明网络底层&#xff0c; 监听服务是它重要的一部分&#xff0c;不是全部&#xff0c;不要把TNS当作只是监听器。 TNS是Oracle Net…