最初想用一个简单的中序遍历来解决,但忽略了子树中节点比上一个根节点大的情况,于是卡住了

在参考过官解后代码如下:

class Solution:
    pre = float('-inf')
    def isValidBST(self , root: TreeNode) -> bool:
        if not root:
            return True
        
        if not self.isValidBST(root.left):
            return False
        
        if root.val < self.pre:
            return False
        
        self.pre = root.val
        if not self.isValidBST(root.right):
            return False
        
        return True

用 pre 来存储节点的前一数值
若 pre 大则左子树上节点并未完全严格小于当前节点,返回 False
若 pre 小则继续