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?
Hint:
- Try to utilize the property of a BST.
- What if you could modify the BST node's structure?
- The optimal runtime complexity is O(height of BST).
class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
stack<TreeNode*> stack;
TreeNode * p=root;
int result;
int count=k;
while((!stack.empty() || p!=NULL)){
if(p!=NULL){
stack.push(p);
p=p->left;
}else{
count--;
if(count==0){
break;
}
p=stack.top();
stack.pop();
p=p->right;
}
}
result =stack.top()->val;
return result;
}
};
这题我的做法其实就是为了中序遍历加了一个计数器。然后就能记录下来BST中的元素大小了。
但是这题的思考部分是要为结点添加子树的大小这个数据。
感觉和非递归遍历BST比谁快?
虽然如果事先就有子树的大小的话确实是O(树高)
二叉搜索树第K小元素
本文介绍了一种寻找二叉搜索树中第K小元素的方法,通过中序遍历实现,并探讨了如何优化算法以应对频繁修改的场景。
646

被折叠的 条评论
为什么被折叠?



