leetcode-98-验证二叉搜索树
题目描述:
方法一:递归O(n) O(n)
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def isValidBST(self, root: TreeNode) -> bool: def isvalidBST(root,lower=float('-inf'),upper=float('inf')): if not root: return True val = root.val if val<=lower or val>=upper: return False if not isvalidBST(root.left,lower,val): return False if not isvalidBST(root.right,val,upper): return False return True return isvalidBST(root)
方法二:迭代O(n) O(n)
class Solution: def isValidBST(self, root: TreeNode) -> bool: if not root: return True stack = [(root.val,float('-inf'),float('inf'))] while stack: root, lower, upper = stack.pop() if not root: continue val = root.val if val <= lower or val >= upper: return False stack.append((root.right, val, upper)) stack.append((root.left, lower, val)) return True
方法三:中序遍历 O(n) O(n)
class Solution: def isValidBST(self, root: TreeNode) -> bool: stack, inorder = [], float('-inf') while stack or root: while root: stack.append(root) root = root.left root = stack.pop() if root.val<=inorder: return False inorder = root.val root = root.right return True