98. 验证二叉搜索树
每日几道leetcode刷刷题!
传送门
题目描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
示例 1:
代码
1.递归
设置上界和下界,左子树的上界是root.val,右子树的下界是root.val
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
#设置上界和下界,左子树的上界是root.val,右子树的下界是root.val
def dfs(node, lower = float('-inf'), upper = float('inf')) -> bool:
if not node:
return True
val = node.val
if val <= lower or val >= upper:
return False
if not dfs(node.right, val, upper):
return False
if not dfs(node.left, lower, val):
return False
return True
return dfs(root)
2.中序
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()
# 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树
if root.val <= inorder:
return False
inorder = root.val
root = root.right
return True