//set容器会自动将元素按升序排列
//将所有元素存入set中,然后输出第k个元素,极为所求
//此法效率贼低
class Solution {
public:
set<int> s;
void dfs(TreeNode* root)
{
if(!root) return;
s.insert(root->val);
dfs(root->left);
dfs(root->right);
}
int kthSmallest(TreeNode* root, int k) {
dfs(root);
if(k>s.size()) return -1;
auto it = s.begin();
for(int i = 1;i<k;i++)
{
it++;
}
return *it;
}
};
对二叉搜索树进行中序遍历,得出的序列为升序序列,则第k-1个元素即为所求
class Solution {
public:
vector<int> v;
void dfs(TreeNode* root){
if(!root) return ;
dfs(root->left);
v.push_back(root->val);
dfs(root->right);
}
int kthSmallest(TreeNode* root, int k) {
dfs(root);
return v[k-1];
}
};