给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。
二叉搜索树满足每个节点的左子树上的所有节点均小于当前节点且右子树上的所有节点均大于当前节点。
例:
图1
图2
数据范围:节点数量满足 ,节点上的值满足
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return bool布尔型 # class Solution: pre = -100000000000000 def isValidBST(self , root: TreeNode) -> bool: # write code here if not root: return True if not self.isValidBST(root.left): return False if root.val < self.pre: return False self.pre = root.val #给每一个节点(分支点)的值储存 if not self.isValidBST(root.right): return False return True
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @return bool布尔型 # class Solution: def isValidBST(self , root: TreeNode) -> bool: # write code here def helper(node, lower=float('-inf'), upper=float('inf')): if not node: return True val = node.val if val <= lower&nbs***bsp;val >= upper: return False if not helper(node.left, lower, val): return False if not helper(node.right, val, upper): return False return True return helper(root)
class Solution: def inOrderTraversal(self, root: TreeNode) -> List[int]: if root is None: return [] return self.inOrderTraversal(root.left) + [root.val] + self.inOrderTraversal(root.right) def isValidBST(self , root: TreeNode) -> bool: res = self.inOrderTraversal(root) if len(res) <= 1: return True for i in range(len(res)-1): if res[i] >= res[i+1]: return False return True