LeetcodeTree
98. Validate Binary Search Tree
generative
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
def inorder(node: Optional[TreeNode]) -> Iterator[int]:
if node:
yield from inorder(node.left)
yield node.val
yield from inorder(node.right)
return all(a < b for a, b in pairwise(inorder(root)))recursive
class Solution:
def isValidBST(
self, node: Optional[TreeNode], low: int = -inf, high: int = inf
) -> bool:
if not node:
return True
if node.val <= low or node.val >= high:
return False
return self.isValidBST(node.left, low, node.val) and self.isValidBST(
node.right, node.val, high
)iterative
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
stack = []
node = root
pre = -inf
while stack or node:
while node:
stack.append(node)
node = node.left
node = stack.pop()
if node.val <= pre:
return False
pre = node.val
node = node.right
return True