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

代码随想录训练营第十八天 530二叉搜索树的最小绝对差 501二叉搜索树中的众数 236二叉树的最近公共祖先

第一题:

原题链接:530. 二叉搜索树的最小绝对差 - 力扣(LeetCode)

思路:

使用中序遍历的方式:左中右。

定义一个pre节点来存放当前节点的前一个节点。

在中序的时候处理递归逻辑:

首先先向左遍历,

在中序的时候将当前节点和前一个节点的值相减取绝对值然后和res进行比较。然后pre更新为cur节点。

最后向右遍历。

代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int getMinimumDifference(TreeNode* root) {if(root == nullptr) return 0;dfs(root);return res;}
private:int res = INT_MAX;TreeNode* pre = nullptr;void dfs(TreeNode* cur){if(cur == nullptr) return;dfs(cur -> left);if(pre != nullptr){res = min(res, abs(cur -> val - pre -> val));}pre = cur;dfs(cur -> right);return;}
};

第二题:

原题链接:501. 二叉搜索树中的众数 - 力扣(LeetCode)

思路:

使用中序遍历的方式,左中右。

定义一个pre节点来存放当前节点的前一个节点。

先向左进行遍历。

在中的时候处理逻辑:

如果pre为空的话证明当前节点是左下角的那个元素,count记录为1;

如果pre的值和cur的值相同,count++;

如果pre和cur不相等count也为1;

然后将pre更新为cur。

如果count的值和maxcount的值相等的话就将cur的值存放在res中,

如果count>maxcount的值话,则需要将res中的值全部都清空,再把cur的值存放到res中。maxcount更新为count的值。

最后向右遍历。

代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> findMode(TreeNode* root) {if(root == nullptr) return {};dfs(root);return res;}
private:int count = 0, maxcount = 0; TreeNode* pre = nullptr;vector<int> res;void dfs(TreeNode* cur){if(cur == nullptr) return;dfs(cur -> left);if(pre == nullptr) count = 1;else if(pre -> val == cur -> val){count++;}else{count = 1;}pre = cur;if(count == maxcount) res.push_back(cur -> val);if(count > maxcount){maxcount = count;res.clear();res.push_back(cur -> val);}dfs(cur -> right);return;}
};

第三题:

原题链接:236. 二叉树的最近公共祖先 - 力扣(LeetCode)

思路:

递归的终止条件:

如果root == null || root == p || root == q,都返回root;

本题使用后序遍历的方式,遍历到最后然后向上返回结果。

新建一个left节点来接收向左递归的结果,

新建一个right节点来接收向右递归的结果;

中:

如果left为空right不为空则返回right;

如果left不为空right为空则返回left;

如果left和right都不为空则返回root;

以上都不是则返回null;

代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == NULL) return NULL;if(root == p || root == q) return root;TreeNode* left = lowestCommonAncestor(root -> left, p, q);TreeNode* right = lowestCommonAncestor(root -> right, p, q);if(left == NULL && right != NULL) return right;if(left != NULL && right == NULL) return left;if(left != NULL && right != NULL) return root;return NULL;}
};

http://www.lryc.cn/news/382276.html

相关文章:

  • 微信小程序之横向列表展示
  • 无人机巡检小羊仿真
  • springboot redission 分布式锁
  • Vuex中的重要核心属性
  • Redis哨兵集群搭建
  • 网络爬虫requests库使用指南
  • VSCODE 配置C++ 与OPENCV
  • C语言小例程28/100
  • WPF文本绑定显示格式StringFormat设置-特殊格式时间日期和多数据绑定
  • Java包介绍
  • 【2024.6.21】今日科技时事:科技前沿大事件
  • LeetCode:经典题之1491、896 题解与延伸
  • 2024三掌柜赠书活动第二十五期:Rust 游戏开发实战
  • 基于Java蛋糕甜品商城系统设计和实现(源码+LW+调试文档+讲解等)
  • Tomcat get请求传数组集合参数
  • 信息学奥赛初赛天天练-34-CSP-J2021完善程序-按位异或、模拟算法、数组模拟环、约瑟夫问题应用
  • 【计算机视觉】人脸算法之图像处理基础知识(六)
  • 仓颉编程语言入门
  • 在前端项目中,如何处理错误和异常?
  • Ubuntu系统下修改网卡IP地址
  • Scrapy如何对爬虫数据进行清洗和处理?
  • Linux:基础IO(三.软硬链接、动态库和静态库、动精态库的制作和加载)
  • 低价可转债崩盘,发生了什么?
  • 【面试题】马上金九银十了,简历该准备起来了,面试题你准备好了吗 ?浅谈 JS 浅拷贝和深拷贝
  • 最新OPPO 真我手机 一加手机 使用adb命令永久关闭系统更新教程
  • OnlyOffice:现代办公的最佳选择
  • 【收藏】2024年必备相图数据库资源集锦!
  • Zookeeper 二、Zookeeper环境搭建
  • Web3 学习
  • Grafana+Prometheus(InfluxDB)+Jmeter使用Nginx代理搭建可视化性能测试监控平台