[路飞]_leetcode-230-二叉搜索树中第K小的元素

简介: leetcode-230-二叉搜索树中第K小的元素

网络异常,图片无法展示
|


[题目地址][B站地址]


给定一个二叉搜索树的根节点 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


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


解题思路


二叉搜索树的性质:


对于任意一棵子树,根节点的值大于左子节点的值,根节点的值小于右子节点的值


基于以上二叉搜索树的性质,如果对二叉搜索树进行中序遍历的话,将会得到一个严格升序的序列,


获取这个序列中的第 k 个元素,就是二叉搜索树中第 k 个最小元素。


代码实现


var kthSmallest = function(root, k) {
  // 记录当前遍历的节点数量
  let num = 0,res;
  // 中序遍历
  function inorder(node){
    if(node === null) return;
    inorder(node.left);
    num++;
    // 如果当前节点是第K个节点,则就是要找的第k个最小元素
    if(num===k){
      // 记录节点值
      res = node.val
      // 退出递归
      return;
    }
    inorder(node.right);
  }
  inorder(root);
  // 返回结果
  return res;
};
复制代码


至此我们就完成了 leetcode-230-二叉搜索树中第K小的元素


如有任何问题或建议,欢迎留言讨论!

相关文章
|
3月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
46 1
|
3月前
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
19 1
|
3月前
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
24 1
|
3月前
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
50 0
|
3月前
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
15 0
|
3月前
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
27 0
|
3月前
【LeetCode 42】501.二叉搜索树中的众数
【LeetCode 42】501.二叉搜索树中的众数
13 0
|
3月前
【LeetCode 41】530.二叉搜索树的最小绝对差
【LeetCode 41】530.二叉搜索树的最小绝对差
15 0
|
3月前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
19 0
|
3月前
【LeetCode 39】700.二叉搜索树中的搜索
【LeetCode 39】700.二叉搜索树中的搜索
25 0