LeetCode230:Kth Smallest Element in a BST
2015-07-29 11:16
387 查看
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个最小的节点的值。
二叉搜索树的中序遍历结果就是它的从小到大的排列,所以可以参考中序遍历的思路。
使用非递归的解法可以查看中序遍历每次遍历的元素是那个,可以根据这一点来求解,对二叉搜索树进行中序遍历,每遍历到一个节点计数器加1,当它的值和k相等时,返回这个节点的值。
runtime:24ms
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个最小的节点的值。
二叉搜索树的中序遍历结果就是它的从小到大的排列,所以可以参考中序遍历的思路。
使用非递归的解法可以查看中序遍历每次遍历的元素是那个,可以根据这一点来求解,对二叉搜索树进行中序遍历,每遍历到一个节点计数器加1,当它的值和k相等时,返回这个节点的值。
runtime:24ms
/** * 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 *> s; TreeNode * node=root; int pos=0; while(!s.empty()||node) { while(node) { s.push(node); node=node->left; } node=s.top(); pos++; if(pos==k) return node->val; s.pop(); node=node->right; } } };
相关文章推荐
- oracle中行转列函数
- .NET Entity Framework入门操作
- maven项目引用错误 和项目结构问题
- upload上传单张图片
- Google Java编程风格指南
- 将word转换成PDF的完美方法
- 玩转Android---UI篇---布局
- Java设计模式之模板
- 社説 20150729 「チーム学校」 いじめ解決に専門家の力を
- 2.2.1 如下为类型CMyString 的声明, 请为该类型添加赋值运算符函数
- 从武侠小说到程序员面试
- LeetCode 之 Subsets(图和暴力枚举)
- 欢迎使用CSDN-markdown编辑器
- 数据中心的未来技术发展方向
- 带箭头的圆角框
- 比较规范的身份证号验证正则表达式
- 关于c++的STL的学习与再认识(二)
- python常用小命令
- 原来你就是这么变丑的!护肤的九大恶习早知道
- 198.House Robber (求非相邻正整数的和最大值)