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)