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

验证二叉搜索树(BST)代码异常:部分测试用例未通过

关于LeetCode第98题「验证二叉搜索树」的代码错误分析

问题背景

给定二叉树的root节点,判断其是否为有效的二叉搜索树(BST)。有效BST定义为:

  • 节点左子树所有节点值小于该节点值;
  • 节点右子树所有节点值大于该节点值;
  • 左右子树也必须是有效BST。

你的实现代码

class Solution(object):
    def isValidBST(self, root):
        if not root:
            return []
        if self.isValidBST(root.left)< [root.val] < self.isValidBST(root.right):
            return True
        else:
            return False

错误原因分析

你的代码存在两个核心问题,直接导致测试用例root = [2,1,3]返回错误结果:

  1. 空节点返回值错误
    当节点为空时,你返回了空列表[],但递归逻辑需要的是布尔值来表示子树是否有效。在Python中,列表之间的比较规则是按元素逐个对比,比如[] < [2]会返回True,但[2] < []会返回False。在测试用例[2,1,3]中,右子节点3的右子树为空,返回[],此时[2] < []结果为False,导致整个条件不成立,最终返回False。

  2. 递归逻辑完全不符合BST的核心要求
    你试图用递归返回的结果和当前节点值比较,但BST的要求是左子树所有节点都小于当前节点,右子树所有节点都大于当前节点,而不是仅左/右子节点满足大小关系。你的代码没有传递上下界约束,无法保证深层子节点符合祖先节点的大小要求,同时递归返回值的类型错误也导致比较逻辑完全失效。

修正思路示例

正确的做法是通过递归传递每个节点的取值范围(下界和上界),确保每个节点的值都在合法区间内:

class Solution(object):
    def isValidBST(self, root):
        def helper(node, lower=float('-inf'), upper=float('inf')):
            # 空树是有效BST
            if not node:
                return True
            # 当前节点值超出上下界则无效
            val = node.val
            if val <= lower or val >= upper:
                return False
            # 右子树的下界是当前节点值,上界继承父节点的上界
            if not helper(node.right, val, upper):
                return False
            # 左子树的上界是当前节点值,下界继承父节点的下界
            if not helper(node.left, lower, val):
                return False
            return True
        return helper(root)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:51:24