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小个节点。比较懒,直接用Binary Search Tree Iterator来写得了、
还可以用搜索二叉树的性质,中序遍历得到的第k个数就是第k小的节点。
代码如下:
public class Solution {
class BSTIterator {
Stack<TreeNode> stack;
Set<TreeNode> visited;
public BSTIterator(TreeNode root) {
stack=new Stack<TreeNode>();
visited=new HashSet<TreeNode>();
stack.add(root);
}
public boolean hasNext() {
if(!stack.isEmpty()){
return stack.peek()==null?false:true;
}
return false;
}
public int next() {
TreeNode node=stack.peek();
while(node.left!=null&&!visited.contains(node.left)){
stack.add(node.left);
node=node.left;
}
node=stack.pop();
if(node.right!=null&&!visited.contains(node.right))
stack.add(node.right);
visited.add(node);
return node.val;
}
}
public int kthSmallest(TreeNode root,int k){
BSTIterator it=new BSTIterator(root);
int i=0;
while(it.hasNext()){
int val=it.next();
i++;
if(k==i)
return val;
}
return 0;
}
}
本文介绍了一种寻找二叉搜索树中第k小元素的方法,利用中序遍历的特性,通过迭代器实现查找,适用于频繁查找场景。
550

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



