Leetcode|Kth Smallest Element in a BST
2015-07-03 08:03
309 查看
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).
解法1:中序遍历
解法2:构造新的BST节点,包含左子树的节点个数信息。如果root节点的count值为k-1,那么就是说有k-1个点比他的值小,该节点就是所求点。如果该节点count值小于k-1(假设为N),寻找他的右孩子,相当于寻找root->right,的count值为(k-1-N). 如果root节点的count值比k-1大,那么继续搜索root->left直到count值为k-1;
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).
解法1:中序遍历
int kthSmallest(TreeNode* root, int k) { if(!root) return 0; stack<TreeNode*> s; while(root||s.size()>0){ if(root){ s.push(root); root=root->left; } else{ TreeNode *p=s.top(); s.pop(); k--; if(k==0) return p->val; root=p->right; } } }
解法2:构造新的BST节点,包含左子树的节点个数信息。如果root节点的count值为k-1,那么就是说有k-1个点比他的值小,该节点就是所求点。如果该节点count值小于k-1(假设为N),寻找他的右孩子,相当于寻找root->right,的count值为(k-1-N). 如果root节点的count值比k-1大,那么继续搜索root->left直到count值为k-1;
相关文章推荐
- 使⽤用cocoaPods import导⼊入时没有提⽰示的解决办法
- leetCode(30):Sort Colors
- leetCode(30):Sort Colors 分类: leetCode 2015-07-03 07:58 159人阅读 评论(0) 收藏
- ORACLE锁
- Oracle临时表
- leetCode(29):Happy Number
- 解析Visual Studio 2015促进生产力的10个新功能
- leetCode(29):Happy Number 分类: leetCode 2015-07-03 07:55 141人阅读 评论(0) 收藏
- 在一个按行列递增的二维数组中查找一个数是否存在
- 使用SpringAop 验证方法参数是否合法
- LeetCode #2 Add Two Numbers
- C++ 与 CDC相关的知识,点滴总结
- LeetCode #1 Two Sum
- 我们都希望在最好的年华遇见一个人,可往往是遇见一个人才迎来最最好的年华
- 【剑指Offer学习】【面试题31:连续子数组的最大和】
- 基础学习总结(八)--Intent中显示意图和隐式意图的用法
- 黑马程序员——C语言基础学习(四)---数组和指针的总结学习
- Android快速开发之appBase——实战《购物车》
- 创业中的眼界——北漂18年(15)
- 黑马程序员----OC学习笔记之category,extension,protocol