本专栏内容为:递归,搜索与回溯算法专栏。 通过本专栏的深入学习,你可以了解并掌握算法。
💓博主csdn个人主页:小小unicorn
⏩专栏分类:递归搜索回溯专栏
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识
专题二
- 题目来源
- 题目描述
- 算法原理
- 代码实现
题目来源
本题来源为:
Leetcode 230. 二叉搜索树中第K小的元素
题目描述
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
算法原理
本题我们采取两个全局变量+中序遍历即可实现,具体我们看下面这个例子:
我们要获取第6小的元素:
我们初始化让count=6,ret=0;从最左节点进行中序遍历:遍历到第一个节点时,就让count-1,将节点值存到ret中,依次内推,当count–到0时,此时的ret就是我们的结果。
代码实现
/**
* 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
{
int count=0;
int ret=0;
public:
int kthSmallest(TreeNode* root, int k)
{
count=k;
dfs(root);
return ret;
}
void dfs(TreeNode* root)
{
if(root==nullptr||count==0)
return ;
dfs(root->left);
count--;
if(count==0)
ret=root->val;
dfs(root->right);
}
};