题目描述

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

说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

示例 1:

输入: root = [3,1,4,null,2], k = 13/ \1   4\2
输出: 1

示例 2:

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

进阶:
如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?


解题思路

二叉搜索树(BST)是一棵二叉树,每个节点的值都大于其左子树中的任意节点的的值而小于右子树的任意节点的值。

翻阅了一下《算法》第四版的相关章节,发现树上的二叉树维护了一个N来记录以当前节点为根节点的子树的节点总数。通过N,我们就可以从上往下遍历二叉搜索树时,选择往左走还是往右走,直到找到我们要找的节点。具体方式如下:

假设我们想找到第k小的元素(即树中正好有k-1个小于它的值),如果左子树中的节点数t > k-1,那我们就继续(递归地)在左子树中搜索第k小的元素;如果t = k-1我们就返回该节点的值;如果t < k-1,我们就(递归地)在右子树中查找第k-t-1小的值。

现在我们需要一个统计N的方法private int size (TreeNode root),可以用递归的方式来实现,每个节点的N等于该节点的左子树的N+该节点的右子树的N+1,这个 1 就是该节点。

源代码

public int kthSmallest (TreeNode root, int k) {int t = size(root.left);if (t > k - 1) return kthSmallest(root.left, k);else if (t < k - 1) return kthSmallest(root.right, k - t - 1);else return root.val;
}private int size (TreeNode root) {if (root == null) return 0;return size(root.left) + size(root.right) + 1;
}

心得体会

这一题是二叉搜索树,而不是简单的二叉树,所以要利用二叉搜索树的特点来找到解题思路。

转载于:https://www.cnblogs.com/yuzhenzero/p/10275561.html

【LeetCode】230#二叉搜索树中第K小的元素相关推荐

  1. LeetCode 230. 二叉搜索树中第K小的元素(中序遍历)

    文章目录 1. 题目信息 2. 解题 2.1 中序递归 2.2 中序循环写法 1. 题目信息 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明: 你可以 ...

  2. 73. Leetcode 230. 二叉搜索树中第K小的元素 (二叉搜索树-中序遍历类)

    给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数).示例 1:输入:root = [3,1,4,null,2], k = 1 输出 ...

  3. LeetCode 230. 二叉搜索树中第K小的元素(递归)

    题目描述 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. 思路 详见链接 代码 c ...

  4. LeetCode 230二叉搜索树中第k小的元素

    思路: ※一.中序遍历,找第k个元素 class Solution { public:vector<int>res;void inorder(TreeNode *root){if(root ...

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

    给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素. 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数. 示例 1: 输入: root = ...

  6. 力扣题目——230. 二叉搜索树中第K小的元素

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查 ...

  7. leetcode 230. Kth Smallest Element in a BST | 230. 二叉搜索树中第K小的元素(Java)

    题目 https://leetcode.com/problems/kth-smallest-element-in-a-bst/ 题解 方法1:中序遍历+剪枝 import java.util.Arra ...

  8. 记录:2022-9-30 打家劫舍 二叉搜索树中第K小的元素 公平锁 磁盘调度

    学习时间:2022-9-30 学习内容 1.LeetCode 198. 打家劫舍 思路 dp[i] = dp[i-1]之前的最大值 + num[i] 优化思路:把最大值用一个变量来存 代码 class ...

  9. leetcode230. 二叉搜索树中第K小的元素(中序遍历)

    给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素.说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数.示例 1:输入: root = [3, ...

最新文章

  1. 手游linux服务器时间同步问题
  2. excel大学计算机试题,大学计算机基础 excel测试题 求答案~~喵~~
  3. 转:用GDB调试程序
  4. ElementUI el-table 在flex下的宽度自适应问题
  5. 把JS里面的Date规范输出为“YYYY-MM-DD HH:mm:SS”的字符串
  6. 机器学习中的群论方法
  7. php is_null(,PHP empty() isset() is_null() 区别与性能比较
  8. Ubuntu18.04 安装搜狗输入法后无法启动的问题
  9. UE3采用多进程编译Shader
  10. 30岁以上开发工程师,无法说出的悲哀与迷茫!
  11. python对日志处理的封装
  12. 可孚医疗的数字化突围
  13. 简单易懂的Kubernetes(K8S)之Pod资源管理与harbor创建
  14. 数说CS|北京大学前沿交叉学科研究院大数据研究中心保研生源大起底!
  15. JavaSE(8)-细节狂魔:21k字长篇深入理解类和对象
  16. 一只100万年也不死的猫
  17. 因为此版本的应用程序不支持其项目类型(.csproj)”之解
  18. YOLO9000, Better, Faster, Stronger论文翻译——中英文对照
  19. QCC514x-QCC304x(headset)系列(入门篇)之1.1-QCC3044之基本介绍
  20. Jupyter 远程连接服务器

热门文章

  1. LTE QCI分类 QoS
  2. sql 基础--mysql 5 (6)
  3. 我已经喜欢上了Python
  4. PowerDesigner生成数据库
  5. VScode配置ROS环境
  6. 惰性求值 php,详细介绍C#函数式编程的示例代码
  7. java负数右移_收入囊中篇---Java程序基础(二)
  8. mysql 1061原因_MySQL死锁问题分析及解决方法实例详解(转)
  9. airflow sql_alchemy_conn mysql_airflow的安装和使用 - 完全版
  10. cmd连接oracle_Oracle -PLSQLDeveloper 13 数据库连接