Kth Smallest Element in a BST(from Leecode
题意:
Given a binary search tree, write a function kthSmallest
to find the kth smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
分析:
另外写一个递归函数来做。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
if(k<=0 || root==nullptr){
return 0;
}
int index = 0;
int result = 0;
order(root,k,index,result);
return result;
}
void order(TreeNode* root,int k,int &index,int &result){
if(root){
if(root->left){
order(root->left,k,index,result);
}
index++;
if(index>k){
return;
}
if(index == k){
result = root->val;
return;
}
if(root->right){
order(root->right,k,index,result);
}
}
}
};