您的位置:首页 > 其它

leetcode -- Validate Binary Search Tree -- 重点

2015-12-16 22:48 369 查看
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的。所以这种思路不对。

这里参考/article/4982538.html

有如下代码, 很巧妙

这段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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: