[LeetCode] Kth Smallest Element in a BST
2015-08-14 16:52
232 查看
Given a binary search tree, write a function
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.
这道题和之前那个next() method的差不多,不过多了一个k值在这里。
题目以及提示了我们要借助BTS的definition来做,遵循这样的顺序:左<根<右
因此在最开始我们先add了所有最右边的treenode后,并不是就万事大吉了,结点之间的右边的Node们同样重要。
举例:stack.pop()出目前的最小值后(只store了左边的treenode的情况下),再pop()一次就一定是第二小的吗?肯定不是的,如果这个最小值的node的node.right!=null的话,很明显node.right的值会小于倒数第二个结点。(说的有点混乱,可画图理解=。=)
因此我们再pop()出目前最小值后,再第二次pop()之前应该马上检测其Node.right并把这些值都按顺序store进stack,然后再借助if statement第二次运行。
代码如下。~
kthSmallestto 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.
这道题和之前那个next() method的差不多,不过多了一个k值在这里。
题目以及提示了我们要借助BTS的definition来做,遵循这样的顺序:左<根<右
因此在最开始我们先add了所有最右边的treenode后,并不是就万事大吉了,结点之间的右边的Node们同样重要。
举例:stack.pop()出目前的最小值后(只store了左边的treenode的情况下),再pop()一次就一定是第二小的吗?肯定不是的,如果这个最小值的node的node.right!=null的话,很明显node.right的值会小于倒数第二个结点。(说的有点混乱,可画图理解=。=)
因此我们再pop()出目前最小值后,再第二次pop()之前应该马上检测其Node.right并把这些值都按顺序store进stack,然后再借助if statement第二次运行。
代码如下。~
public class Solution { public int kthSmallest(TreeNode root, int k) { Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root; int result = 0; while(!stack.isEmpty() || p!=null){ if(p!=null){ stack.push(p); p = p.left; }else{ TreeNode temp = stack.pop(); k--; if(k==0){ result = temp.val; } p = temp.right; } } return result; } }
相关文章推荐
- 免写前缀JS包--prefixfree.min.js--插件
- A simple Test-Query Program
- OC_内存管理(二)对象复制、循环引用问题、自动释放池
- EasyUI中tree,Datagrid,pagenation的使用EasyUI中Datagrid和pagenation进行关联时,再次点击pagenation时让表格数据显示的问题
- EasyUI中tree,Datagrid,pagenation的使用EasyUI中Datagrid和pagenation进行关联时,再次点击pagenation时让表格数据显示的问题
- 关于R画误差分析图——做到和MATLAB一样
- google test
- 分布式全文检索系统SolrCloud简介
- PHP一致性哈希实现。。
- memcache分布式 [一致性hash算法] 的php实现
- 安卓最全的权限配置(精)
- 《JavaScript高级程序设计》读书笔记——函数内部属性arguments
- 时常注意:Web开发和设计上容易被忽视的8个错误
- sharepoint2010迁移到2013后,帐号更新
- win7 or xp 下oracle 导入or导出
- NYOJ 月老的难题 (最大二分图匹配,匈牙利算法)
- 常用网站
- js星级评分点击星级评论打分效果--收藏--转载
- NYOJ 月老的难题 (最大二分图匹配,匈牙利算法)
- SQL 修改排序规则的问题 sql_latin1_general_cp1_ci_as