"""
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
"""
from TreeNode import TreeNode
# 递归
def isValidBST1(root):
def helper(node, lower=float("-inf"), upper=float("inf")):
if not node:
return True
val = node.val
if val <= lower or val >= upper:
return False
if not helper(node.right, val, upper):
return False
if not helper(node.left, lower, val):
return False
return True
return helper(root)
# 时间复杂度:o(N) 每个节点访问一次
# 空间复杂度:o(N) 我们跟进了整棵树
# 迭代
def isValidBST2(root):
if not root:
return True
stack = [(root, 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
root1 = TreeNode(5)
root2 = TreeNode(1)
root3 = TreeNode(7)
root4 = TreeNode(6)
root5 = TreeNode(8)
root6 = TreeNode(10)
root7 = TreeNode(9)
root1.left = root2
root1.right = root3
root3.left = root4
root3.right = root5
root4.left = root6
root4.right = root7
print(isValidBST2(root1))
来源:CSDN
作者:Lishu_cc
链接:https://blog.csdn.net/weixin_41529389/article/details/103548084