Kth Smallest Element in a BST

本文介绍了一种寻找二叉搜索树中第k小元素的方法,利用中序遍历的特性,通过迭代器实现查找,适用于频繁查找场景。

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;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值