Leetcode 二叉搜索树的第 K 个元素

复习一下二叉搜索树
二叉搜索树 (Binary Search Tree, 简称 BST) 是一种特殊的二叉树(可以为空),其中每个节点都有一个值,并且满足以下特点:

定义:

  1. 左子树节点的值小于根节点的值:对于每个节点,左子树中所有节点的值都小于该节点的值。
  2. 右子树节点的值大于根节点的值:对于每个节点,右子树中所有节点的值都大于该节点的值。
  3. 左右子树本身也是二叉搜索树:即递归地应用上述规则,左子树和右子树也必须是二叉搜索树。

特点:

  1. 查找效率高 :在理想情况下(树的高度接近平衡时,即左右子树高度接近),二叉搜索树的查找、插入、删除操作的时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn),其中 n n n 是树中的节点数。
  2. 有序性:二叉搜索树的中序遍历会按升序输出节点的值,因此可以用来进行排序或快速查找最大、最小值。
  3. 插入和删除:插入新节点和删除节点时,需要遵循二叉搜索树的规则,确保树的有序性。
  4. 平衡性问题 :在极端情况下(如连续插入升序或降序的值),二叉搜索树可能会退化为一条链表,此时树的高度为 O ( n ) O(n) O(n),查找、插入和删除的时间复杂度将退化为 O ( n ) O(n) O(n)。
  5. 空间复杂度 :使用指针结构,空间复杂度通常为 O ( n ) O(n) O(n),其中 n n n 是节点数。

注意 :为了避免二叉搜索树退化为链表,一些平衡二叉搜索树如红黑树 (Red-Black Tree) 或 AVL 树等会动态保持树的平衡性,确保操作的时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn)。

算法思想:

  1. 二叉搜索树的性质 :二叉搜索树(BST)有一个重要性质:左子树的所有节点值都小于根节点,右子树的所有节点值都大于根节点。因此,对二叉搜索树进行中序遍历 (先左子树 -> 根节点 -> 右子树),会按升序依次访问每个节点的值。

  2. 中序遍历的过程可以确保我们从最小的节点开始访问,并依次访问较大的节点。因此,当我们访问到第 k 个节点时,该节点即为树中第 k 小的元素。

java solution

java 复制代码
class Solution {
    private int count = 0;
    private int result = 0;
    public int kthSmallest(TreeNode root, int k) {
        inorderTraversal(root, k);
        return result;
    }
    private void inorderTraversal(TreeNode root, int k) {
        if(root == null) {
            return;
        }
        // 递归遍历左子树
        inorderTraversal(root.left, k);

        // 访问当前节点
        count++;
        if(count == k) {
            result = root.val;
            return; //找到结果后可以直接返回
        }

        // 递归遍历右子树
        inorderTraversal(root.right, k);
    }
}
相关推荐
zheyutao4 小时前
字符串哈希
算法
A尘埃4 小时前
保险公司车险理赔欺诈检测(随机森林)
算法·随机森林·机器学习
网络安全-杰克4 小时前
2026面试自动化测试面试题【含答案】
自动化测试·软件测试·面试·职场和发展
大江东去浪淘尽千古风流人物5 小时前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
努力学算法的蒟蒻5 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_841495645 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦5 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
CodeSheep程序羊6 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
2401_841495646 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
budingxiaomoli6 小时前
优选算法-字符串
算法