LeetCode *** 230. Kth Smallest Element in a BST
2016-04-11 18:14
477 查看
题目:
Given a binary search tree, write a function
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:
Show Hint
Try to utilize the property of a BST.Show
More Hint
What if you could modify the BST node's structure?Show
More Hint
The optimal runtime complexity is O(height of BST).
分析:
我用的是最low的非递归中序遍历。
代码:
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:
Show Hint
Try to utilize the property of a BST.Show
More Hint
What if you could modify the BST node's structure?Show
More Hint
The optimal runtime complexity is O(height of BST).
分析:
我用的是最low的非递归中序遍历。
代码:
/** * 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) { vector<int> res; stack<TreeNode*> tree; stack<bool> visited; tree.push(root); visited.push(false); int count=0; while(!tree.empty()){ TreeNode *tmp=tree.top(); bool isV=visited.top(); visited.pop(); if(tmp->left&&!isV){ tree.push(tmp->left); isV=true; visited.push(isV); visited.push(false); continue; } res.push_back(tmp->val); tree.pop(); if(tmp->right){ tree.push(tmp->right); visited.push(false); } } return res[k-1]; } };
相关文章推荐
- laravel核心之ioc容器
- hdu 1078 FatMouse and Cheese (dfs+记忆化搜索)
- javascript学习笔记w3chool
- getSupportFragmentManager要用在FragmentActivity及其子类中
- getSupportFragmentManager要用在FragmentActivity及其子类中
- MyEclipse10.0各个版本的下载地址
- ExpandableView(可展开的列表组件)
- 面向对象的理解
- android 内存泄漏分析
- 【笔记】根据屏幕的宽度动态设置image宽高
- android布局之线性布局
- JavaMail邮件开发
- java native方法及JNI实例
- 高性能web服务容错机制
- 组合问题的java实践
- iOS获取设备容量
- 南阳题目218-Dinner
- VC++ 实现文件与应用程序关联
- HBase原理、设计与优化实践
- 染色配对