問題描述
給定一個二叉搜尋樹的根節點 root ,和一個整數 k ,請你設計一個演算法查詢其中第 k 小的元素(從 1 開始計數)。
分析
已經給定BST,找出第k大的數字。
- 可以利用BST性質:中序遍歷一定是升序陣列,遍歷到第k個結點即為答案,複雜度O(n)
- 注意,java中成員變數名與函式形參重名,可以用this.x=x,C++中,可以用this->x=x解決
實現
class Solution {
public:
int x = 0;
int k;
int res;
void solve(TreeNode* root) {
if (root == nullptr) {
return ;
}
solve(root->left);
x++;
if (x == k) {
res = root->val;
}
solve(root->right);
return ;
}
int kthSmallest(TreeNode* root, int k) {
if (root == nullptr) {
return -1;
}
this->k = k;
solve(root);
return res;
}
};