判断是否为二插搜索树,即当前节点满足 左子结点 < 当前节点 < 右子结点,且所有的节点均满足, 递归遍历所有结点,直到节点为空; 遍历时对于未知节点以无穷值代替,如 root.left 向 left 分支时, 其 left 节点的值为 float("-inf"); root.right 向 right 分支时, 其 right 节点的值为 float("inf")。 代码如下:

class Solution:
    def isValidBST(self , root: TreeNode) -> bool:
        # write code here
        return self.valid_bst(root, TreeNode(float("-inf")), TreeNode(float("inf")))
    
    def valid_bst(self, root: TreeNode, left: TreeNode, right: TreeNode) -> bool:
        if not root:
            return True
        if root.val < left.val or root.val > right.val:
            return False
        return self.valid_bst(root.left, left, root) and self.valid_bst(root.right, root, right)