class Solution(object):
def min(self, node):
if node==None:
return None
if 'minv' in node.__dict__:
return node.minv
ret=node.val
left=self.min(node.left)
if left!=None and left < ret:
ret=left
right=self.min(node.right)
if right!=None and right < ret:
ret=right
node.minv=ret
return ret
def max(self, node):
if node==None:
return None
if 'maxv' in node.__dict__:
return node.maxv
ret=node.val
left=self.max(node.left)
if left!=None and left > ret:
ret=left
right=self.max(node.right)
if right!=None and right > ret:
ret=right
node.maxv=ret
return ret
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root==None:
return True
maxleft=self.max(root.left)
minright=self.min(root.right)
if maxleft!=None and maxleft>=root.val:
return False
if minright!=None and minright<=root.val:
return False
return self.isValidBST(root.left) and self.isValidBST(root.right)