98.验证二叉搜索树

该文章介绍了一种优化的二叉搜索树(BST)有效性检查方法。通过左中右中序遍历,利用最大值动态更新,一旦发现当前节点值不满足大于已遍历最大值的条件,则立即判断该树非BST并返回False,减少了不必要的遍历。
摘要由CSDN通过智能技术生成

2023.6.15
注意左中右中序遍历二叉搜索树时,遍历到的值一定是递增的。
因此只需要记录下来遍历过的值的最大值,则当前遍历值必须大于这个最大值,否则以当前节点为根节点的二叉树就不是二叉搜索树,返回False即可
本代码相对于随想录中的版本,在得到isleft后如果isleft == False,就直接返还当前节点不是二叉搜索树,这样可能减少遍历的次数,如果当前节点的左节点已经不是二叉搜索树了就不会再遍历其右节点了。

class Solution:
    def __init__(self):
        self.max = float('-inf')

    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True
        
        # 左
        isleft = self.isValidBST(root.left)  
        if not isleft:
            return False
        # 中
        if root.val > self.max:
            self.max = root.val
        else: return False
        # 右
        isright = self.isValidBST(root.right)
        return isright
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值