2023.6.15
注意左中右中序遍历二叉搜索树时,遍历到的值一定是递增的。
因此只需要记录下来遍历过的值的最大值,则当前遍历值必须大于这个最大值,否则以当前节点为根节点的二叉树就不是二叉搜索树,返回False即可
本代码相对于随想录中的版本,在得到isleft后如果isleft == False,就直接返还当前节点不是二叉搜索树,这样可能减少遍历的次数,如果当前节点的左节点已经不是二叉搜索树了就不会再遍历其右节点了。
class Solution:
def __init__(self):
self.max = float('-inf')
def isValidBST(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
# 左
isleft = self.isValidBST(root.left)
if not isleft:
return False
# 中
if root.val > self.max:
self.max = root.val
else: return False
# 右
isright = self.isValidBST(root.right)
return isright