给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
示例 1:
输入:root = [3,1,4,null,2], k = 1 输出:1
示例 2:
输入:root = [5,3,6,2,4,null,null,1], k = 3 输出:3
代码如下:
//二叉搜索树的特点:左子树的值永远小于根节点的值,右子树的值永远大于根节点的值,用中序遍历的特点:左-根-右,可以将二叉搜索树遍历出来的值由小到大排列,返回一个有序数组,在数组的第k-1处,就是要找的第k小的元素
class Solution {
public:
void midorder(TreeNode* root,vector<int>& res)
{//中序遍历
if(root==nullptr)
{
return;
}
midorder(root->left,res);
res.push_back(root->val);
midorder(root->right,res);
}
int kthSmallest(TreeNode* root, int k) {
vector<int> res;
midorder(root,res);//调用中序遍历的函数
return res[k-1];//返回数组中满足条件的数字
}