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

蓝桥与力扣刷题(230 二叉搜索树中第k小的元素)

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

解题思路+代码:

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    //全局变量
    int count = 0 ;
    int res = -1 ; //声明未找到第K小的个元素的结果为-1
    public int kthSmallest(TreeNode root, int k) {
        /**
        思路:(深度优先搜索DFS)
        1.判断根节点是否为空,是返回0
        2.根据平衡二叉树(左子树小于根节点,右子树大于根节点)的性质,从左子树开始查找第K小的个元素
         */
        dfs(root,k);
        return res;
    }

    public void dfs(TreeNode node,int k){
        if(node == null || res != -1){
            return ;
        }
        //遍历左子树,查找第K小的元素
        dfs(node.left,k);
        //继续查找第K小的元素
        count++;
        //第k小的元素为根节点时,res为根节点的值
        if(count == k){
            res = node.val;
            return ;
        }

        //遍历右子树,查找第K小的元素
        dfs(node.right,k);
    }
}

总结:解答这道题需要了解二叉搜索树(平衡二叉树)的性质,根据性质使用递归方法来查找第 k 小的元素。分析第 k 小的元素所在的情况:1.查找不到第 k 小的元素所在(二叉树只有5个节点时,找第7小的元素) 2.第 k 小的元素在左子树  3.第 k 小的元素为根节点  4.第 k 小的元素在右子树 在任一种情况种查找到第 k 小的元素时返回该元素的值即可。

http://www.dtcms.com/a/21305.html

相关文章:

  • Java项目《苍穹外卖》BUG修复记录
  • 微分方程(Blanchard Differential Equations 4th)-补充习题03
  • windows11 wsl报错
  • 总部年会天府感怀
  • 动态规划 之 数组长度加长规避初始化
  • internVL的本地部署微调实践——L2G4
  • 标准输入输出流,面向对象,构造函数
  • Kafka集群,常见MQ面试问题
  • 聚簇索引和非聚簇索引
  • 蓝桥杯 Java B 组之栈的应用(括号匹配、表达式求值)
  • Python 2 和 Python 3 在字符串编码上的差异
  • java八股文之Redis
  • 政务浏览器API文档及Demo大升级
  • uniapp二次封装组件(py组件)
  • SQL复习
  • 微调codegeex
  • 跟着AI学习vue3第二章
  • 机器视觉--switch语句
  • 基于N-gram模型的中文文本分析系统设计与实现
  • 什么是关系数据库理论?(函数依赖,范式)
  • 轻量级5G核心网:适应未来网络需求的关键方案
  • 【第11章:生成式AI与创意应用—11.2 音频与音乐生成的探索与实践】
  • C程序设计(第5版)——谭浩强(1)
  • lazarus 从资源文件中加载PNG图片
  • 【SpringBoot】深度解析 Spring Boot 拦截器:实现统一功能处理的关键路径
  • 跟着李沐老师学习深度学习(十)
  • LabVIEW开发CANopen的TPDO数据读取
  • IDEA集成DeepSeek
  • [特殊字符] 用Rust重塑Web开发速度极限:Hyperlane框架——开启高性能服务的「光年时代」[特殊字符]
  • 模型GPU->NPU(Ascend)迁移训练简述