【剑指offer】刷题 之 用javascript 实现二叉搜索数中寻找第k小的节点(顺便吐槽牛客网的算法判定什么鬼!)

题目要求

给定一棵二叉搜索树,请找出其中的第k小的结点。

解题思路

二叉搜索树的自身结构特点可以通过中序遍历后,得到一个非递减的有序序列,我们存储一下个序列并找到第k-1的位置即可。

实现代码

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function KthNode(pRoot, k)
{
    // write code here
  if(!pRoot){
    return null;
  }
  let stack = []; // 用于存储遍历后的有序序列
  function dfsReverse(node) {
    if(node != null) {
      dfsReverse(node.left);
      stack.push(node.val);
      dfsReverse(node.right);
    }
  }
  dfsReverse(pRoot);
  if(k>stack.length) {
    return null;
  }
  return stack[k-1]
}

吐槽一下牛客的算法判定

这道题我首先在leetcode上刷过一遍了,和这里的题意大体一致,只不过需要反转一下,找的是最大的k个节点。
实现的结果如下图所示:
在这里插入图片描述
而类似的逻辑,我在牛客上稍加改动后,居然测试用例有一部分跑不通了,只有百分之35,这就很奇怪:
在这里插入图片描述
我为了验证到底是怎么回事,我就本地准备了牛客上出现问题的测试用例跑了一下,单步调试,结果如下图所示:
在这里插入图片描述
真的是相当奇怪,本地也是按照预期正确执行了。百思不得其解的我翻看了牛客网上其他通过了答案,结果发现,我给的代码第16行改为stack.push(node); 就可以了。真的是说不通,牛客网的判定需要改进啊。所以如果在牛客网上自己的算法测试用例不能全部跑通,未必是你的逻辑或者语法有问题,也有可能是牛客网背后的判定出了诡异的bug。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值