leetcode098.验证二叉搜索树

376 阅读1分钟

098.验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        def check_bst(node, left, right):
            if not node:
                return True
            if not left < node.val < right:  # 二叉搜索树的中序遍历结果呈升序
                return False
            return check_bst(node.left, left, node.val) \
                   and check_bst(node.right, node.val, right)

        return check_bst(root, float("-inf"), float("inf"))
# 递归
# 不仅右子结点要大于该节点,整个右子树的元素都应该大于该节点。
# 所以在遍历树的同时要保留结点的上确界与下确界,
# 在比较时不仅比较子结点的值,也要与上下确界比较。
# 二叉搜索树的中序遍历结果呈升序