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

力扣HOT100之二叉树:230. 二叉搜索树中第 K 小的元素


这道题直接用最笨的办法来做的,用递归来做,我们定义一个全局变量vector<int> element,然后使用中序遍历,每当碰到一个非空节点就将其加入到向量中,这样依赖当向量中的元素小于k时,就返回0,否则返回element[k - 1],下面是对应的代码。

/*** 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> element{};int kthSmallest(TreeNode* root, int k) {//中序遍历//遇到空节点返回0if(!root) return 0;//左kthSmallest(root -> left, k);//中element.emplace_back(root -> val);//右kthSmallest(root -> right, k);return element.size() >= k ? element[k - 1] : 0;}
};

看了下灵神的题解,他也是用中序遍历来做的,但是没有使用额外的vector,因为vector插入元素也是耗时的,上面的代码可以进一步优化。
由于原函数已经规定了必须要有返回值,所以我们可以自己额外定义一个没有返回值的函数,这里我们可以用lambda函数来实现。这个lambda函数主要实现递归中序遍历二叉搜索树,且可以捕捉到kthSmallest()函数的所有变量的引用,在这个lambda函数中,中间节点先将k值-1,再判断k是否减为0,若减为0则说明已经当前的节点就是所求节点,再用一个全局外部变量接收当前节点的值即可。在遍历结束后直接将这个全局外部变量返回即可。以下是优化过后的代码。

/*** 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 result;int kthSmallest(TreeNode* root, int k) {auto dfs = [&] (this auto&& dfs, TreeNode* root) -> void{//递归终止条件if(!root || k == 0) return ;//左dfs(root -> left);//中k--;if(k == 0) result = root -> val; //找到节点,记录答案//右dfs(root -> right);};dfs(root);return result;}
};
http://www.lryc.cn/news/2379886.html

相关文章:

  • pinia.defineStore is not a function
  • 入职软件开发与实施工程师了后........
  • PCL点云库点云数据处理入门系列教材目录(2025年5月更新....)
  • Linux面试题集合(5)
  • python动漫论坛管理系统
  • 【ubuntu24.04】pycharm 死机结束进程
  • Java 中Supplier延迟生成值的原因
  • 设置windows10同时多用户登录方法
  • Web 技术与 Nginx 网站环境部署
  • 分组背包问题:如何最大化背包价值?
  • nodejs快速入门到精通1
  • FP8精度革命:Hopper架构下大模型训练的误差传播控制方法
  • 手动制做一个Transformer
  • 已解决——如何让网站实现HTTPS访问?
  • WebRTC技术EasyRTC嵌入式音视频通信SDK助力智能电视搭建沉浸式实时音视频交互
  • Unreal Engine: Windows 下打包 AirSim项目 为 Linux 平台项目
  • Spring MVC HttpMessageConverter 的作用是什么?
  • 小乌龟git中的推送账户、作者账户信息修改
  • Kubernetes MCP服务器(K8s MCP):如何使用?
  • Node.js聊天室开发:从零到上线的完整指南
  • R²AIN SUITE 亮相第九届智能工厂高峰论坛
  • 深入理解仿函数(Functors):从概念到实践
  • InternLM 论文分类微调实践(XTuner 版)
  • 《Python星球日记》 第88天:ChatGPT 与 LangChain
  • PC:使用WinSCP密钥文件连接sftp服务器
  • 1688正式出海,1688跨境寻源通接口接入,守卫的是国内工厂资源
  • 力扣303 区域和检索 - 数组不可变
  • Spring的后置处理器是干什么用的?扩展点又是什么?
  • [ linux-系统 ] 进程地址空间
  • 文件名是 ‪E:\20250512_191204.mp4, EV软件录屏,未保存直接关机损坏, 如何修复?