二叉树--230. 二叉搜索树中第K小的元素/medium 理解度A

1、题目

给定一个二叉搜索树的根节点 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 小的值,你将如何优化算法?

Related Topics
  • 深度优先搜索
  • 二叉搜索树
  • 二叉树

2、题目分析

对于二叉搜索树,从小到大遍历就是对树的中序遍历。

3、复杂度最优解代码示例

    int kthSmallest = 0;
    int k = 0;
    public int kthSmallest(TreeNode root, int k) {
        this.k = k;
        dfs(root);
        return kthSmallest;
    }
    public void dfs(TreeNode node) {
        if (node == null || k == 0) {
            return;
        }

        dfs(node.left);
        // 当k减为0时,表明找到了第k小,把第k小保存起来。
        // 踩坑:错误写法 kthSmallest = --k == 0 ? node.val : 0。在后续回溯过程中,k 会被减为负数,所以 kthSmallest 又被重置为0。
        // 收获:递归写法中,终止条件不仅要考虑传递时的终止,还要考虑回归时的终止。
        kthSmallest = --k == 0 ? node.val : kthSmallest;
        dfs(node.right);
    }

4、适用场景

在二叉搜索树中查找第K小的元素,在许多应用场景中都非常有用:

  1. 数据分析:在数据分析中,我们经常需要找到数据集中的第K小的元素。例如,在金融分析中,可能需要找到某个股票价格的历史数据中的第K低的值。

  2. 机器学习:在机器学习中,我们经常需要对特征进行排序或选择。在这种情况下,找到第K小的元素可以帮助我们快速定位到重要的特征。

  3. 数据库查询优化:在数据库查询中,我们经常需要对结果进行排序。在这种情况下,找到第K小的元素可以帮助我们快速定位到满足条件的记录。

  4. 实时系统:在某些实时系统中,我们需要快速找到第K小的元素。例如,在实时股票市场中,我们需要快速找到当前价格最低的K只股票。

  5. 游戏开发:在游戏开发中,我们可能需要找到分数排名、等级排名等。在这种情况下,找到第K小的元素可以帮助我们快速确定玩家的排名。

  6. 社交网络:在社交网络中,我们可能需要找到最受欢迎的K个话题、最活跃的K个用户等。在这种情况下,找到第K小的元素可以帮助我们快速确定热门话题和活跃用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值