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

力扣算法ing(42/100)

3.29 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

我的思考:

中序遍历:1 2 3 4

1 2 3 4 5 6

我们发现中序遍历是一个升序的数组

对二叉树进行中序遍历,我们中序遍历寻找第k个节点,k–,如果k=0,返回这个节点

我的代码:


function kthSmallest(root: TreeNode | null, k: number): number {
    if(root === null) return null;
    function helpFind(root: TreeNode | null, k: number): number {
        if(root === null) return null;
        helpFind(root.left , k);
        k--;
        if(k === 0) return root.val;
        helpFind(root.right , k);
    }
    return  helpFind(root , k);
    
};

答案错误:

返回值处理不当:在 helpFind 函数中,当你递归调用 helpFind(root.left, k) 时,你没有处理它的返回值。如果左子树中已经找到了第 k 小的值,那么你应该立即返回这个值,而不是继续递归右子树。

全局 k 的值未更新:在递归调用 helpFind(root.left, k) 后,即使左子树中找到了第 k 小的值,k 的值并没有被更新或传递回来,因此 k-- 可能会在错误的节点上执行。

利用res来存储值

这两段代码的主要区别就在于k,代码2中res 和 target 被用作控制递归流程的全局状态变量,代码1这样还是

有点危险,还是用全局变量存储吧

正确代码:

 function helpFind(root: TreeNode | null) {
        if(root === null) return;
        helpFind(root.left);
        target--;
        if(target === 0){
            res = root.val;
        };
        helpFind(root.right);
    }
    if(root === null) return null;
    let res : number = 0;
    let target = k;
    helpFind(root)
    return  res;

恭喜恭喜!!终于看到二叉搜索树就使用中序遍历啦!虽然我觉得第一个答案是可以的,但是一直答案错误,ai说用全局变量比较好,okok,那就用试试吧,果然成功了(苦笑)。

相关文章:

  • 向量数据库学习笔记(2) —— pgvector 用法 与 最佳实践
  • 如何将 performance_schema 中的 TIMER 字段转换为日期时间
  • 【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建,并实现远程联机,详细教程
  • 基于springboot+vue的农产品电商平台
  • 【软考-架构】10.2、需求分析-获取-定义-验证-管理
  • 基于LAC拨号的L2TP VPN实验
  • stock-pandas,一个易用的talib的替代开源库。
  • Cyber Weekly #49
  • 用LLama factory时报类似Process 2504721 got signal: 1的解决方法
  • 基于javaweb的SpringBoot水果生鲜商城系统设计与实现(源码+文档+部署讲解)
  • 645.错误的集合
  • 扩散模型总结
  • resnet网络迁移到昇腾执行(OM上篇)
  • ERP、MES和CRM三大企业系统的详细介绍及对比分析
  • 生成树和VRRP实验
  • 【keil】单步调试
  • python学习笔记(3)——元组
  • 【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程
  • 2. client.chat.completions.create 简单使用
  • 【C++标准IO库】文件的输入输出
  • 建发股份:将于5月6日召开股东大会,审议提名林茂等为公司新一届董事等议案
  • 长三角铁路“五一”假期运输今启动:预计发送旅客量增6%,5月1日当天有望创新高
  • 为何未来的福利国家必须绿色且公平
  • 李公明|一周画记:哈佛打响第一枪
  • 51岁国家移民管理局移民事务服务中心联络部副主任林艺聪逝世
  • 李在明当选韩国共同民主党总统候选人