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

力扣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;}
};

相关文章:

  • python-leetcode 67.寻找两个正序数组中的中位数
  • MySQL数据库基础 -- SQL 语句的分类,存储引擎
  • Django框架的前端部分使用Ajax请求一
  • 【数根】2022-1-24
  • Vue 中 v-model 的三种使用方式对比与实践
  • C++23 std::mdspan:多维数组处理新利器
  • 【第二届帕鲁杯】第二届帕鲁杯 主环境 基本完整wp
  • linux安装conda环境-ubuntu
  • ECharts-饼图
  • 深入理解 ZAB:ZooKeeper 原子广播协议的工作原理
  • 游戏开发实战(一):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】
  • 云计算简介:从“水电”到“数字引擎”的技术革命
  • 使用docker——10分钟内 完成一个高可用的 MongoDB 副本集部署
  • 【HTML】【面试提问】HTML面试提问总结
  • UE5在C++项目中判断不同平台
  • Docker项目部署深度解析:从基础命令到复杂项目部署
  • HarmonyOS实战:自定义时间选择器
  • 基于正点原子阿波罗F429开发板的LWIP应用(1)——网络ping通
  • YOLOv8 在单片机上的几种部署方案
  • 【日常笔记】wps如何将值转换成东西南北等风向汉字
  • 首届巴塞尔艺术奖公布:大卫·哈蒙斯、曹斐等36人获奖
  • 聚焦智能浪潮下的创业突围,“青年草坪创新创业湃对”走进北杨人工智能小镇
  • 19国入境团抵沪并游玩,老外震惊:“怎么能有这么多人?”
  • 浙江美术馆馆长人民日报撰文:打开更辽阔的审美场域
  • 芬兰直升机相撞坠毁事故中五名人员全部遇难
  • 北京韩美林艺术馆党支部书记郭莹病逝,终年40岁