验证二叉搜索树(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]返回错误结果:
空节点返回值错误
当节点为空时,你返回了空列表[],但递归逻辑需要的是布尔值来表示子树是否有效。在Python中,列表之间的比较规则是按元素逐个对比,比如[] < [2]会返回True,但[2] < []会返回False。在测试用例[2,1,3]中,右子节点3的右子树为空,返回[],此时[2] < []结果为False,导致整个条件不成立,最终返回False。递归逻辑完全不符合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
相关产品推荐
相关产品推荐

