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

【二叉树】Leetcode 230. 二叉搜索树中第K小的元素【中等】

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

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

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

解题思路

二叉搜索树的中序遍历结果是有序的,因此可以通过中序遍历来找到第k个最小元素。

  • 1、进行中序遍历二叉搜索树,递归地遍历左子树、当前节点、右子树。
  • 2、使用一个全局变量count记录当前已经遍历到的节点个数。
  • 3、在每次遍历到一个节点时,count加1,如果count等于k,则返回当前节点的值。
  • 4、如果count小于k,则继续递归遍历右子树。

Java实现

public class KthSmallestBST {static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}}private int count;private int result;public int kthSmallest(TreeNode root, int k) {count = 0;result = 0;inorderTraversal(root, k);return result;}private void inorderTraversal(TreeNode root, int k) {if (root == null || count >= k) {return;}// 中序遍历,先访问左子树inorderTraversal(root.left, k);// 访问当前节点count++;if (count == k) {result = root.val;return;}// 再访问右子树inorderTraversal(root.right, k);}public static void main(String[] args) {TreeNode root = new TreeNode(3);root.left = new TreeNode(1);root.right = new TreeNode(4);root.left.right = new TreeNode(2);KthSmallestBST solution = new KthSmallestBST();int k = 2;int result = solution.kthSmallest(root, k);System.out.println("The " + k + "th smallest element is: " + result);}
}

时间空间复杂度

  • 时间复杂度:O(n),其中n是二叉搜索树中的节点数,每个节点都需要访问一次。
  • 空间复杂度:O(height),递归调用栈的深度为树的高度。
http://www.lryc.cn/news/329900.html

相关文章:

  • JS中常用的几种事件
  • Android WebView的使用与后退键处理
  • 【备忘录】Docker 2375远程端口安全漏洞解决
  • 343. 整数拆分(力扣LeetCode)
  • Spring面试题系列-3
  • 【比特币】比特币的奥秘、禁令的深层逻辑与风云变幻
  • 【情感分析概述】
  • 【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换属性重组
  • 5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)
  • Python版【植物大战僵尸 +源码】
  • 【明道云】如何让用户可以新增但不能修改记录
  • GPT-1原理-Improving Language Understanding by Generative Pre-Training
  • web3.0入门及学习路径
  • MATLAB 自定义中值滤波(54)
  • harmonyOS的客户端存贮
  • 安科瑞智慧安全用电综合解决方案
  • Web 前端性能优化之二:图像优化
  • android——枚举enum
  • Day54:WEB攻防-XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架
  • 2024年MathorCup数学建模思路C题思路分享
  • HCIP作业
  • 如何向sql中插入数据-接上一篇《MySQL数据库的下载和安装以及命令行语法学习》续
  • 简单的HTML
  • 2024最新 maven 高级用法 (概念自己百度)
  • 【C++】每日一题 12 整数转罗马数字
  • C++学习建议
  • python实现泊松回归
  • 软件测试-进阶篇
  • Google人才选拔的独特视角
  • OSPF---开放式最短路径优先协议