当前位置: 首页 > news >正文

day21二叉树part07|530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

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

遇到在二叉搜索树上求什么最值,求差值之类的,都要思考一下二叉搜索树可是有序的,要利用好这一特点。

class Solution {
public:void trival(TreeNode* node, vector<int>& nums) {if (node == nullptr) return ;trival(node->left, nums);nums.push_back(node->val);trival(node->right, nums);}int getMinimumDifference(TreeNode* root) {// 遇到在二叉搜索树上求什么最值,求差值之类的,// 都要思考一下二叉搜索树可是有序的,要利用好这一特点。vector<int> nums;trival(root, nums);int result = INT_MAX;for (int i = 1; i < nums.size(); i++) {result = min(result, nums[i] - nums[i - 1]);}return result;}
};

需要领悟一下二叉树遍历上双指针操作,优先掌握递归
题目链接/文章讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E5%B7%AE.html
视频讲解:https://www.bilibili.com/video/BV1DD4y11779

**501.二叉搜索树中的众数 **

这种方法,对普通二叉树和搜索二叉树都行
对于递归函数,中序和前序都行,因为只是统计一下val的频率

class Solution {
public:void trival(TreeNode* node, unordered_map<int, int>& map,int& maxFreq) {if (node == nullptr) return ;trival(node->left, map, maxFreq);map[node->val]++;maxFreq = max(maxFreq, map[node->val]);trival(node->right, map, maxFreq);return;}vector<int> findMode(TreeNode* root) {unordered_map<int, int> map;vector<int> result;int maxFreq = 0;if (root == nullptr) return result;trival(root, map, maxFreq);// for (const auto& entry : map) {//     if (entry.second == maxFreq) {//         result.push_back(entry.first);//     }// }for (auto it = map.begin(); it != map.end(); ++it) {if (it->second == maxFreq) {result.push_back(it->first);}}return result;}
};

和 530差不多双指针思路,不过 这里涉及到一个很巧妙的代码技巧。
可以先自己做做看,然后看我的视频讲解。
https://programmercarl.com/0501.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0.html
视频讲解:https://www.bilibili.com/video/BV1fD4y117gp

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

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {// 确定返回条件// 如果是叶子节点if (root == nullptr || root == q || root == p) {return root;}// 在左子树中寻找p和q的最近公共祖先TreeNode* leftLCA = lowestCommonAncestor(root->left, p, q);// 在右子树中寻找p和q的最近公共祖先TreeNode* rightLCA = lowestCommonAncestor(root->right, p, q);// 中// 如果左右子树中都分别找到了p和q,则当前节点为最近公共祖先节点if (leftLCA && rightLCA) {return root;}// 如果只在左子树中找到了p和q,则左子树中的最近公共祖先即为最近公共祖先if (leftLCA) {return leftLCA;}// 如果只在右子树中找到了p和q,则右子树中的最近公共祖先即为最近公共祖先return rightLCA;}
};

本题其实是比较难的,可以先看我的视频讲解
https://programmercarl.com/0236.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html
视频讲解:https://www.bilibili.com/video/BV1jd4y1B7E2

相关文章:

  • 【网络运维的重要性】
  • 学习C++编程入门:时间、方法及经验分享
  • Unix环境高级编程--7-进程环境--7.1-7.2main函数-7.3进程退出
  • 人工智能初识
  • DOS学习-目录与文件应用操作经典案例-del
  • 2024年3月电子学会青少年软件编程 中小学生Python编程等级考试一级真题解析(选择题)
  • Flutter 中的 NestedScrollViewViewport 小部件:全面指南
  • 【Linux】Linux基本指令2
  • 哈希表练习题(2024/5/29)
  • 汇舟问卷:国外问卷调一天900
  • 数据结构(一)顺序表
  • HTML-JavaWeb
  • 一致性hash算法原理图和负载均衡原理-urlhash与least_conn案例
  • 开源博客项目Blog .NET Core源码学习(27:App.Hosting项目结构分析-15)
  • 宝塔PHP环境安装配置Xdebug
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • AWS实战 - 利用IAM对S3做访问控制
  • cookie和session
  • Fastjson的基本使用方法大全
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Python3爬取英雄联盟英雄皮肤大图
  • React Transition Group -- Transition 组件
  • REST架构的思考
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vue2.x学习三:事件处理生命周期钩子
  • 阿里研究院入选中国企业智库系统影响力榜
  • 动态规划入门(以爬楼梯为例)
  • 多线程事务回滚
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 世界上最简单的无等待算法(getAndIncrement)
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 我的面试准备过程--容器(更新中)
  • 白色的风信子
  • 大数据全解:定义、价值及挑战
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (2)空速传感器
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (十)c52学习之旅-定时器实验
  • (十三)Maven插件解析运行机制
  • (已解决)什么是vue导航守卫
  • (转载)深入super,看Python如何解决钻石继承难题
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .Net Core与存储过程(一)
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 微服务 服务保护 自动重试 Polly
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NetCore部署微服务(二)
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法