验证二叉搜索树 (Python)

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

# 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值