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

leetcode230. 二叉搜索树中第K小的元素

lletcode 230. 二叉搜索树中第K小的元素,链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst
题目描述
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
解法一
直接dfs中序遍历,代码如下:

/*** 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> res;int kthSmallest(TreeNode* root, int k) {dfs(root);return res[k - 1];}void dfs(TreeNode* root){if(!root)return;dfs(root->left);res.push_back(root->val);dfs(root->right);}
};

解法二

/*** 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 kthSmallest(TreeNode* root, int k) {int res = 0;if(root == nullptr || k < 1) {return -1;}int numOfLeftNodes = getNumOfNodes(root->left);int numOfRightNodes = getNumOfNodes(root->right);if (numOfLeftNodes == k - 1) {return root->val;} else if (numOfLeftNodes >= k) {return kthSmallest(root->left, k);} else {return kthSmallest(root->right, k - numOfLeftNodes - 1);}}private:int getNumOfNodes(TreeNode* root) {if (!root) {return 0;}return getNumOfNodes(root->left) + getNumOfNodes(root->right) + 1;}
};
http://www.lryc.cn/news/309731.html

相关文章:

  • 医学大数据|文献阅读|有关“肠癌+机器学习”的研究记录
  • Linux信号【systemV】
  • node.js最准确历史版本下载
  • UE5 C++ 单播 多播代理 动态多播代理
  • 前端学习、CSS
  • Flink基本原理 + WebUI说明 + 常见问题分析
  • 3. 文档概述(Documentation Overview)
  • 【vue3 路由使用与讲解】vue-router : 简洁直观的全面介绍
  • ubuntu创建账号和samba共享目录
  • 李沐动手学习深度学习——3.6练习
  • 机器学习_10、集成学习-Bagging(自举汇聚法)
  • 【力扣hot100】刷题笔记Day20
  • Redis 之八:Jdeis API 的使用(Java 操作 Redis)
  • Docker 应用入门
  • 朱维群将出席用碳不排碳碳中和顶层科技路线设计开发
  • linux如何查看磁盘占用情况
  • 【C++庖丁解牛】类与对象
  • 在什么时候企业档案才会发生调整
  • Linux或Windows下判断socket连接状态
  • 编译链接实战(25)gcc ASAN、MSAN检测内存越界、泄露、使用未初始化内存等内存相关错误
  • [HackMyVM]靶场 VivifyTech
  • 软考高级系统分析师:关联关系、依赖关系、实现关系和泛化关系概念和例题
  • 设计模式学习笔记 - 面向对象 - 9.实践:如何进行面向对象分析、设计与编码
  • 【iOS ARKit】RealityKit 同步机制
  • 【数据结构与算法】整数二分
  • java项目打包运行报异常:xxxxx-1.0-SNAPSHOT.jar中没有主清单属性
  • MAC-键盘command快捷键、设置windows快捷键
  • C++ 补充之常用遍历算法
  • 【Linux杂货铺】调试工具gdb的使用
  • FL Studio Producer Edition2024中文进阶版Win/Mac