Kth Smallest Element in a BST
/**
* 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:
pair<TreeNode *, int> findkth(TreeNode *r, int k) {
if (!r) {
return make_pair(static_cast<TreeNode *>(NULL), 0);
}
pair<TreeNode *, int> leret = findkth(r->left, k);
if (!leret.first && k == leret.second + 1) {
leret.first = r;
}
if (leret.first) {
return leret;
}
pair<TreeNode *, int> riret = findkth(r->right, k - leret.second - 1);
if (riret.first) {
return riret;
}
riret.second += leret.second + 1;
return riret;
}
int kthSmallest(TreeNode* root, int k) {
pair<TreeNode *, int> ret = findkth(root, k);
return ret.first->val;
}
};