108.Kth Smallest Element in a BST
2016-04-10 10:27
375 查看
Given a binary search tree, write a function
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个结点。
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?
分析:即找中序遇到的第k个结点。
/** * 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 * 中序遇到的第k个结点。 * @date 20160410 */ public int kthSmallest(TreeNode root, int k) { if(root == null){ return 0; }else{ TreeNode node = root; Stack stack = new Stack(); stack.push(node); /*node表示入栈的元素,popnode表示弹栈的元素*/ while(!stack.isEmpty()){ while(node.left != null){//向左走到尽头,把最左分支的结点都入栈。 node = node.left; stack.push(node); } TreeNode popnode= (TreeNode) stack.pop();//弹出栈顶元素 k--; if(k == 0){ return popnode.val; } /*如果弹栈的元素有右孩子,则让其右孩子入栈,进行下一次循环*/ if(popnode.right != null){ node = popnode.right; stack.push(node); } } } return 0; }
相关文章推荐
- ubuntu全盘备份与恢复
- Python selenium API
- 关于键盘,位运算
- 常见算法之希尔排序java实践
- [Java学习]javac 编译源文件出现“锘缝ublic”、“非法字符: \65279”的乱码情况
- DirectX 9.0 3D 笔记
- 菱形继承中各个类里面的成员函数
- 八皇后问题 -- 递归,回溯算法
- kvc取值
- 定制布局:栅格系统
- Java中Properties类的使用
- 事务的隔离级别和传播性
- 创建下拉框方法总结和经验分享
- 团队成员介绍
- 取消父控件的伸缩会导致子控件伸缩
- CAS和ABA问题
- 《转》Spring4 Freemarker框架搭建学习
- 【转载】架构师需要了解的Paxos原理、历程及实战
- Python文件读取
- 数据库索引优化入门