求得二叉搜索树的第k小的元素

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

须知:二叉搜索树,又叫二叉排序树,二叉查找树。特点是:左子树的所有元素都小于等于根节点,右子树的所有节点都大于等于根节点。并且,二叉搜索树的中序遍历是升序排列的

自己的思路:刚开始不知道二叉搜索树的性质;自己采用了优先队列的方式:

    public int kthSmallest(TreeNode root, int k){
PriorityQueue<Integer> pqueue = new PriorityQueue<Integer>((s1,s2)->s2-s1);
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
TreeNode node = queue.poll();
pqueue.add(node.val);
if (pqueue.size()>k){
pqueue.poll();
}
if (node.left != null){
queue.add(node.left);
}
if (node.right!=null){
queue.add(node.right);
}
}
return pqueue.poll();
}

但是效率并不好。

之后利用二叉搜索树的性质可以加快查找:利用栈来添加和移除元素。

    public int kthSmallest2(TreeNode root, int k){
LinkedList<TreeNode> stack = new LinkedList<>();
while (true){
while (root!=null){
stack.add(root);
root = root.left;
}
root = stack.removeLast();
if (--k==0) return root.val;
root = root.right;
}
}

复杂度分析

  • 时间复杂度:O(H+k)
  • 空间复杂度:O(H+k) H:树的高度。

最新文章

  1. hibernate整合spring开发的时候遇到的一些小问题
  2. header元素
  3. django apache 通过wsgi部署
  4. Jedis 连接redis超时
  5. Cross Validation done wrong
  6. Java中浮点数能连续精确表示整数的范围
  7. win7下Chrome有两个图标的解决方法
  8. [React] React Fundamentals: Build a JSX Live Compiler
  9. QT5.6所开放的7个新模块(图表,虚拟键盘,性能分析,静态分析,测试正好,2D渲染)
  10. HDU--2015
  11. Docker服务端防护
  12. dotnet core使用开源组件FastHttpApi进行web应用开发(转)
  13. 浅谈C++ STL
  14. Unity的几个特殊文件夹
  15. 功能强大的swiper插件
  16. 我的TDD实践---TDD概念篇
  17. Xcode调试与其他
  18. tensorflow省钱方案-ml-engine
  19. Git Step by Step – (3) Git对象模型
  20. sublime text3---Emmet:HTML/CSS代码快速编写神器

热门文章

  1. [日常摸鱼]51nod1237-最大公约数之和V3-杜教筛
  2. 如何push一个docker镜像到DockerHub上
  3. 一文搞懂 CountDownLatch 用法和源码!
  4. 容器编排系统k8s之Ingress资源
  5. NGINX镜像的制作
  6. Redis中的常用命令哪些?
  7. Java学习日报7.30
  8. 吞食鱼2(FeedingFrenzyTwo) 修改器
  9. 跟我一起学python(1):占位符
  10. Solon rpc 1.2.18 发布,突出Rpc特性