https://leetcode.com/problems/validate-binary-search-tree/

二叉树的问题,要想到递归。这里容易想到的就是如果左右子树都存在,只要

if root.left.val < root.val < root.right.val:
   return self.isValidBST(root.left) and self.isValidBST(root.right)

但其实不对,看case [10,5,15,null,null,6,20]。这里root 10的right subtree 也是valid的,但是其中6是小于10的。所以这种思路不对。

有如下代码, 很巧妙
这段code 的最大值最小值不应是2147483647 和-2147483648。应该选稍微小一点的下界和稍微大一点的上界,否则[2147483647]这个case过不了,为了方便可以取10**10>2147483647和-10**1<-2147483648,

参考http://chaoren.is-programmer.com/posts/42736.html

class Solution:
    # @param root, a tree node
    # @return a boolean
    def ValidBST(self, root, min, max):
        if root == None:
            return True
        if root.val <= min or root.val >= max:
            return False
        return self.ValidBST(root.left, min, root.val) and self.ValidBST(root.right, root.val, max)

    def isValidBST(self, root):
        return self.ValidBST(root, -2147483648, 2147483647)
        #return self.ValidBST(root, -10**10, 10**10)