最初想用一个简单的中序遍历来解决,但忽略了子树中节点比上一个根节点大的情况,于是卡住了
在参考过官解后代码如下:
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 小则继续