验证二叉搜索树 (Python)

本文介绍了如何通过递归方式实现二叉搜索树的合法性检查,并探讨了中序遍历的特性。通过实例展示了如何使用递归函数判断每个节点的值是否符合BST的定义,以及验证整个树是否为有效的二叉搜索树。同时,提到了中序遍历在二叉搜索树中的升序特性作为验证辅助手段。
摘要由CSDN通过智能技术生成

递归 利用二叉搜索树的定义

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        def isValid(node: Optional[TreeNode], lower, upper) -> bool:
            if not node:
                return True
            # 判断当前节点是否符合 上下界
            if node.val >= upper or node.val <= lower:
                return False
            # 当前节点的左子树的值的上界是 当前节点的值
            # 更新上界 维持之前的下界
            if not isValid(node.left, lower, node.val):
                return False
            # 当前节点的右子树的值的下界是 当前节点的值
            if not isValid(node.right, node.val, upper):
                return False
            # 到达此处 当前节点的值符合上下界  左、右子树的值也符合各自的上下界
            return True
        return isValid(root, -math.inf, math.inf)

二叉搜索树的中序遍历是升序遍历

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        tmpVal, stack, cur = -math.inf, [], root
        while stack or cur:
            while cur:
                stack.append(cur)
                cur = cur.left
            tmp = stack.pop()
            # 二叉搜索树的中序遍历为升序遍历
            # 进行中序遍历 和上一个节点的值进行对比即可
            if tmp.val <= tmpVal:
                return False
            cur = tmp.right
            tmpVal = tmp.val
        return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值