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

验证二叉搜索树(BST)的函数是否正确?能否优化?

验证二叉搜索树的函数有效性与优化建议

一、函数有效性分析

你的这段验证BST的代码是有效的,核心逻辑完全契合二叉搜索树的定义:每个节点的值必须严格大于左子树的所有节点,严格小于右子树的所有节点。

通过递归传递上下界(mn为当前节点的最小允许值,mx为最大允许值)的方式,能精准约束每个节点的合法取值范围。你测试的有效树返回True,修改节点值(如把4改为5、7改为3)后返回False,也验证了逻辑的正确性。

不过存在一个边界漏洞:如果传入的root是None(空树),当前代码会直接抛出AttributeError,因为尝试访问root.val,而空树本身属于合法的二叉搜索树,需要补充处理。

二、优化方向与实现

1. 修复边界情况+简化递归逻辑

先处理空树的情况,同时简化左右子树的判断代码,让逻辑更紧凑:

class Node:
    val: int
    left: 'Node | None' = None
    right: 'Node | None' = None

    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def isValidBST(root: Node | None, mn=float('-Inf'), mx=float('+Inf')) -> bool:
    if not root:
        return True
    if not (mn < root.val < mx):
        return False
    # 合并左右子树的递归判断,只要有一个不合法就返回False
    return isValidBST(root.left, mn, root.val) and isValidBST(root.right, root.val, mx)

2. 迭代实现(避免递归栈溢出)

如果树的高度极大(比如接近链表结构),递归会触发RecursionError,改用迭代的深度优先搜索(DFS)方式,用栈存储每个节点的上下界:

def isValidBST(root: Node | None) -> bool:
    if not root:
        return True
    # 栈中存储 (节点, 最小允许值, 最大允许值)
    stack = [(root, float('-Inf'), float('+Inf'))]
    while stack:
        node, mn, mx = stack.pop()
        if not (mn < node.val < mx):
            return False
        # 右子树先入栈(保证左子树先处理,和递归顺序一致)
        if node.right:
            stack.append((node.right, node.val, mx))
        if node.left:
            stack.append((node.left, mn, node.val))
    return True

3. 中序遍历验证(另一种思路)

BST的中序遍历结果是严格递增的,也可以通过这个特性验证:

def isValidBST(root: Node | None) -> bool:
    prev = float('-Inf')
    stack = []
    current = root
    while stack or current:
        # 遍历到最左节点
        while current:
            stack.append(current)
            current = current.left
        current = stack.pop()
        if current.val <= prev:
            return False
        prev = current.val
        current = current.right
    return True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:43:27