10. 二叉搜索树中第 k 小的元素
题目链接:
题目描述:

题目示例:

解法:中序遍历 + 计数器剪枝
算法思路:
上述解法不仅使用大量额外空间存储数据,并且会将所有的结点都遍历一遍。但是,我们可以根据中序遍历的过程,只需扫描前 k 个结点即可。因此,我们可以创建一个全局的计数器 count,将其初始化为 k,每遍历一个节点就将 count--。直到某次递归的时候,count 的值等于 0,说明此时的结点就是我们要找的结果。
C++ 算法代码:
/**
* 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 count, ret = 0;
int kthSmallest(TreeNode* root, int k) {
count = k;
dfs(root);
return ret;
}
void dfs(TreeNode* root) {
if(root == nullptr || count == 0) {
return;
}
(root->left);
(--count == ) {
ret = root->val;
;
}
(root->right);
}
};







