# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
#创建一个空数组
inorder =[]
def help( root):
nonlocal inorder
# 1. 基线条件:如果当前节点为空,直接返回,什么也不做
if root is None:
return
# 2. 递归遍历左子树
help(root.left)
# 3. 处理(访问)根节点:将根节点的值添加到结果列表中
# 这一步在中序遍历中位于左右子树递归之间
inorder.append(root.val)
# 4. 递归遍历右子树
help(root.right)
return
help(root)
for i in range(0,len(inorder)-1): # i和i+1 进行比较, 所以i到倒数第二就可以了。 list [0,len-1] range [0: len)
if inorder[i+1]<= inorder[i]:
return False
return True
不用创建数组,只看当前节点和前一个节点的大小
def isValidBST0(self, root: Optional[TreeNode]) -> bool:
#创建一个空数组
pre_node =float('-inf')
def help( root):
nonlocal pre_node
# 1. 基线条件:如果当前节点为空,直接返回,什么也不做
if root is None:
return True
# 2. 递归遍历左子树
if not help(root.left):
return False
# 3. 处理(访问)根节点:将根节点的值添加到结果列表中
# 这一步在中序遍历中位于左右子树递归之间
if pre_node >= root.val :
return False
pre_node=root.val
# 4. 递归遍历右子树
if not help(root.right):
return False
return True
return help(root)