当前位置: 首页 > news >正文

算法----二叉搜索树中第K小的元素

题目

  1. 二叉搜索树中第K小的元素
    给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

示例 1:
在这里插入图片描述

输入:root = [3,1,4,null,2], k = 1
输出:1
示例 2:
在这里插入图片描述

输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3

提示:

树中的节点数为 n 。
1 <= k <= n <= 104
0 <= Node.val <= 104

解决思路

解决方法

方法一:

    //完全可以先放后取//而不是边取边放//代码好些 逻辑也容易理解fun kthSmallest2(root: TreeNode?, k: Int): Int {val linkedList = LinkedList<TreeNode>()var cur: TreeNode? = rootvar curIndex = 1while (!linkedList.isEmpty() || cur != null) {while (cur != null) {linkedList.push(cur)cur = cur.left}cur = linkedList.pop()if (curIndex++ == k) {return cur!!.`val`}//当前节点不满足 移出去cur = cur?.right}return -1}

方法二:
我自己手写的,逻辑不是很清晰
队列的push 和 pop 不太好

    public fun kthSmallest(root: TreeNode?, k: Int): Int {val linkedList = LinkedList<TreeNode>()var cur: TreeNode? = nullif (root != null) {linkedList.add(root)}var curIndex = 1while (!linkedList.isEmpty()) {//当前cur为空 说明有一个新的根节点 需要遍历左孩子if (cur == null) {cur = linkedList.peek()while (cur?.left != null) {linkedList.push(cur.left)cur = cur.left}} else {cur = linkedList.peek()}if (curIndex++ == k) {return cur!!.`val`}//当前节点不满足 移出去linkedList.pop()//右边有孩子 那么需要遍历左孩子if (cur?.right != null) {linkedList.push(cur.right)cur = null}}return -1}

总结

按部就班就可以做好95%的工作 所以机器有时候比人做的更好 更快 不管是ETC 不管是围棋

大部分还都是平凡人

有的时候需要忘的差不多了才去些算法才能记忆深刻

做题频率确实低了很多

http://www.lryc.cn/news/99795.html

相关文章:

  • 阿里Java开发手册~安全规约
  • 消息中间件RabbitMQ——学习笔记
  • 爬虫005_python类型转换_其他类型转换为整型_转换为Float类型_转换为字符串_转换为布尔值---python工作笔记023
  • SpringBoot复习:(5)使用PropertySource注解
  • webrtc 支持H265(三) 总结
  • Windows使用Notepad++编辑Linux服务器的文件
  • 升级你的数据采集引擎 使用多线程与代理池提升HTTP代理爬虫性能
  • flask实现一个登录界面
  • redis的四种模式优缺点
  • maven本地仓库地址修改+maven国内镜像设置+maven运行所需pos.xml文件配置基本写法
  • Jenkins集成SonarQube保姆级教程
  • Git的安装以及本地仓库的创建和配置
  • 现在运动耳机什么牌子的好用、最好的运动耳机推荐
  • 监控指标与监控类型
  • Vue实现柱状图横向自动滚动
  • 解决构建maven工程时,配置了阿里云的前提下,依旧使用中央仓库下载依赖导致失败的问题!!!
  • MYSQL DCL语句
  • 4H-SiC nMOSFETs的亚阈值漏电流扫描滞后特性
  • 设计模式(单例模式)
  • [SQL挖掘机] - 算术函数 - sqrt
  • 数据结构--顺序表、单链表
  • 云安全攻防(一)之 云原生
  • #vue3报错 Cannot read properties of null (reading ‘isCE‘)#
  • 【计算机视觉中的 GAN 】 - 生成学习简介(1)
  • 深度学习实战44-Keras框架下实现高中数学题目的智能分类功能应用
  • Redis Sentinel 及 Redis Cluster
  • shell中按照特定字符分割字符串,并且在切分后的每段内容后加上特定字符(串),然后再用特定字符拼接起来
  • 探寻智能化未来:AI与Web3共创金融领域巨大潜力
  • Django学习笔记-表单(forms)的使用
  • 机器学习分布式框架ray运行TensorFlow实例