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?
求二叉搜索树的第k个最小的节点的值。
二叉搜索树的中序遍历结果就是它的从小到大的排列,所以可以参考中序遍历的思路。
使用非递归的解法可以查看中序遍历每次遍历的元素是那个,可以根据这一点来求解,对二叉搜索树进行中序遍历,每遍历到一个节点计数器加1,当它的值和k相等时,返回这个节点的值。
runtime:24ms
/**
* 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) {
stack<TreeNode *> s;
TreeNode * node=root;
int pos=0;
while(!s.empty()||node)
{
while(node)
{
s.push(node);
node=node->left;
}
node=s.top();
pos++;
if(pos==k)
return node->val;
s.pop();
node=node->right;
}
}
};