# 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
#
# 有效 二叉搜索树定义如下:
#
#
# 节点的左子树只包含 小于 当前节点的数。
# 节点的右子树只包含 大于 当前节点的数。
# 所有左子树和右子树自身必须也是二叉搜索树。
#
#
#
#
# 示例 1:
#
#
# 输入:root = [2,1,3]
# 输出:true
#
#
# 示例 2:
#
#
# 输入:root = [5,1,4,null,null,3,6]
# 输出:false
# 解释:根节点的值是 5 ,但是右子节点的值是 4 。
#
#
#
#
# 提示:
#
#
# 树中节点数目范围在[1, 10⁴] 内
# -2³¹ <= Node.val <= 2³¹ - 1
#
# Related Topics 树 深度优先搜索 二叉搜索树 二叉树 👍 1275 👎 0
# leetcode submit region begin(Prohibit modification and deletion)
# 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: TreeNode) -> bool:
current = float("-inf")
def traverse(node):
nonlocal current
if node:
if traverse(node.left) is False:
return False
if node.val <= current:
return False
else:
current = node.val
if traverse(node.right) is False:
return False
return True
return traverse(root)
# leetcode submit region end(Prohibit modification and deletion)