LeetCode Kth Smallest Element in a BST
2015-07-03 16:50
567 查看
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). Credits: Special thanks to @ts for adding this problem and creating all test cases.
如果树节点结构是这样的话,直接进行中序遍历得出,如果在树中的节点添加一个count字段用于表示该子树含有的数值数量就可以在logn的时间里得出。就是一个动态计算rank的功能。
下面是inorder的代码:
/** * 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 { private: int idx; int value; int K; public: int kthSmallest(TreeNode* root, int k) { K = k; idx = 0; dfs(root); return value; } void dfs(TreeNode* root) { if (root == NULL) { return; } dfs(root->left); idx++; if (idx == K) { value = root->val; return; } dfs(root->right); } };
相关文章推荐
- 循环队列实现(C++) Ring Buffer
- javascript arguments(转)
- 将函数的实际参数转换成数组的方法,习惯用Array.prototype.slice.call(arguments)
- switch case语句里面不能定义对象,有语法错误,除非加一个花括号
- RelativeLayout布局的相关参数详解
- 关于IOS的多任务以及内存管理
- Nginx配置
- SQL的主键和外键约束
- PHP socket 异步框架
- Fragment 和 FragmentActivity的使用
- 函数指针的几种用法
- 解决svn: Can’t convert string from ‘UTF-8′ to native encoding
- Xcode6设置模拟器键盘的中文输入
- hibernate 3 升级到hibernate 4 导致的懒加载的问题
- [Java IO]04_系统标准IO
- Git使用
- .Net学习笔记----2015-07-03(进程类)
- Java核心API -- 9(异常)
- 解析10位时间戳
- malloc 结合内部数据结构讲解逻辑实现原理