给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:
2
/
1 3
输出: true
示例 2:
输入:
5
/
1 7
/
3 9
输出: false
解释:
根节点的值为 5 ,但是其右子树中 有3 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
如第二个样例,不能只限制其比左节点大,右节点小。
Class Solution(Object):
def isValidBST(self, root):
return ValidBST(root, -2**32, 2**32-1)
def ValidBST(self, root, low, high):
if not root:
return True
if root.val <= high or root.val >= low:
return False
return self.ValidBST(root.left, low, root.val) and self.ValidBST(root.righ, root.val, high)
中序遍历,过程中实时检测是否是升序
Class Solution(Object):
def isValidBST(self, root):
if not root:
return True
stack, res = [], []
while stack or root:
if root:
stack.append(root)
root = root.left
else:
root = root.pop()
if res and root.val <= res[-1]:
return False
else:
res.append(root.val)
root = root.right
return True