题意:在二叉搜索树中找到第k小的元素。
解题思路:直接按照二叉搜索树中序遍历即可得到从小到大排列的数组,即很容易找到第k小的值
#include<iostream>
using namespace std;
// 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) {}
};
//方法一:中序遍历求第k小的值
class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
int target, num = 0;
bool flag = false;
recursion(root, k, num, target, flag);
return target;
}
void recursion(TreeNode* root, int k, int& num, int& target, bool& flag) {
if (flag) return;
if (root) {
recursion(root->left, k, num, target, flag);
num += 1;
if (num == k) {
target = root->val;
flag = true;
}
recursion(root->right, k, num, target, flag);
}
}
};