题解 | #判断是不是二叉搜索树#
判断是不是二叉搜索树
https://www.nowcoder.com/practice/a69242b39baf45dea217815c7dedb52b
# 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: if not root: return True if not root.left or not root.right: if not root.left and root.right: if root.val <= root.right.val: return True else: return False elif not root.right and root.left: if root.val >= root.left.val: return True else: return False elif not root.left and not root.right and root: return True if root.left.val <= root.val <= root.right.val: self.isValidBST(root.left) self.isValidBST(root.right) else: return False return True def isValidBST(self , root: TreeNode) -> bool: if not root: return True if root.left and root.left.val >= root.val: return False if root.right and root.right.val <= root.val: return False if not self.isValidBST(root.left) or not self.isValidBST(root.right): return False return True''' def helper(self, root, min_val, max_val): if not root: return True if root.val <= min_val or root.val >= max_val: return False return (self.helper(root.left, min_val, root.val) and self.helper(root.right, root.val, max_val)) def isValidBST(self, root: TreeNode) -> bool: return self.helper(root, float('-inf'), float('inf'))