[leetcode] 230. Kth Smallest Element in a BST 解题报告
2016-01-11 14:34
1106 查看
题目链接:https://leetcode.com/problems/kth-smallest-element-in-a-bst/
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?
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).
思路:要找第k个数,中序遍历二叉树, 直到找到第k个
如果要频繁查找的话可以在数据结构中添加一个字段,记录左节点有多少个。这样最多只要O(h)的时间复杂度。
代码如下:
Given a binary search tree, write a function
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.
What if you could modify the BST node's structure?
The optimal runtime complexity is O(height of BST).
思路:要找第k个数,中序遍历二叉树, 直到找到第k个
如果要频繁查找的话可以在数据结构中添加一个字段,记录左节点有多少个。这样最多只要O(h)的时间复杂度。
代码如下:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int kthSmallest(TreeNode* root, int k) { stack<TreeNode*> st; while(root || !st.empty()) { while(root) { st.push(root); root = root->left; } root = st.top(); st.pop(); if(--k ==0) return root->val; root = root->right; } return 0; } };
相关文章推荐
- android FragmentPagerAdapter getItem方法没有执行
- mycat的使用---sqlserver和mysql
- FTP文件上传(自定义文件夹)、删除、下载、读取
- Windows下使用taskkill 命令批量结束进程
- Karma和Jasmine自动化单元测试
- 广告标识符用途的选择
- jq选择(互斥)同级元素
- Java 打印
- 【Unity闲谈】2D游戏的角色跟随,角色队列的实现
- jsp中自动提交表单
- Shell Python 日期和时间戳的互相转换
- http://www.iyaxi.com/2015-11-17/732.html
- c++打印环境变量
- 20160111
- teradata PI-- 数据分布
- Use multiple CPU Cores with your Linux commands — awk, sed, bzip2, grep, wc, etc.
- CDI进阶第三步 CDI验证器
- ajax 点击加载更多,出现后面的内容,一次加载十条内容
- Dubbo安装部署
- 写代码中遇到的奇异的事件--------------间断更新中