题目:
代码(首刷自解 2024年3月6日):
看到二叉搜索树 就要想想中序遍历能不能解
class Solution {
public:
int count;
int res;
void helper(TreeNode* root, int k) {
if (!root) return;
helper(root->left, k);
count++;
if (count == k) res = root->val;
helper(root->right, k);
}
int kthSmallest(TreeNode* root, int k) {
count = 0;
helper(root, k);
return res;
}
};
代码(二刷自解 2024年4月12日 7min)
class Solution {
public:
void recursion(TreeNode* root, vector<int>& isVisited, int k) {
if (!root) return;
if (isVisited.size() > k) return;
recursion(root->left, isVisited, k);
// 获取元素
isVisited.push_back(root->val);
recursion(root->right, isVisited, k);
}
int kthSmallest(TreeNode* root, int k) {
// 中序遍历
vector<int> isVisited;
recursion(root, isVisited, k);
return isVisited[k - 1];
}
};