题目地址:
https://leetcode.com/problems/kth-smallest-element-in-a-bst/
在一棵二叉搜索树中寻找第 k k k小的元素。
直接带着一个计数器进行中序遍历,当计数器恰好等于 k k k的时候说明当前节点即为所求。代码如下:
/**
* 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;
dfs(root, k, res);
return res;
}
void dfs(auto* p, int& k, int& res) {
if (!p) return;
dfs(p->left, k, res);
if (!--k) {
res = p->val;
return;
}
dfs(p->right, k, res);
}
};
时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( h ) O(h) O(h)。