You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排序数组构建的BST验证JS代码返回true但LeetCode输出false原因排查

问题原因说明

1. 本地代码返回true是正确结果

你用有序数组二分递归生成的树本身就是合法二叉搜索树:

  • 构建逻辑是每次取数组中间元素作为根,左半部分递归生成左子树,右半部分递归生成右子树,天然满足BST左子树所有节点小于根、右子树所有节点大于根的规则
  • 你的isvalidBST函数用中序遍历判断序列严格递增的逻辑完全正确,BST的核心特征就是中序遍历结果为严格升序序列,所以返回true符合预期。

2. LeetCode返回false的核心原因

你大概率是混淆了二叉树的输入格式:
LeetCode的二叉树输入数组是层序遍历的序列化格式,不是直接拿有序数组按二分方式生成树。以你给出的数组[1, 7, 11, 17, 21, 29, 74, 89, 91, 101, 132, 157]为例,按LeetCode的层序反序列化规则生成的二叉树结构如下:

  • 根节点是第0位的1
  • 根的左子节点是第1位的7,右子节点是第2位的11
  • 这时候根节点的左子节点7已经大于根值1,直接违反BST规则,所以验证结果为false。

额外注意点

  • 你的Node构造函数写法有冗余:参数已经定义了left和right的默认值,但函数体内直接写死了this.left = null和this.right = null,会覆盖传入的左右节点,不过你构建树的时候是手动赋值left和right,所以不影响最终生成的树结构。
  • 如果是把isvalidBST函数提交到LeetCode出错,你的代码逻辑本身没有漏洞:用节点对象对比而不是初始化最小值为-Infinity的写法,已经规避了节点值为最小安全整数的边界问题,判断条件node.data <= temp.data也覆盖了重复值的校验,符合LeetCode的BST规则要求。

内容的提问来源于stack exchange,提问作者Nithin Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 06:54:02