```# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @return bool布尔型
#
'''
“”“
区间+递归
”“”
class Solution:
def isValidBST(self , root: TreeNode) -> bool:
return self.dfs(root, float('-inf'), float('inf'))
def dfs(self,root,l,r):
if not root:
return True
if root.val<l or root.val>r:
return False
return self.dfs(root.left,l,root.val) and self.dfs(root.right,root.val,r)
'''
"""
中序遍历
"""
class Solution:
def isValidBST(self , root: TreeNode) -> bool:
res=[]
def zhongxu(root):
if root is None:
return None
if root.left is not None:
zhongxu(root.left)
res.append(root.val)
if root.right is not None:
zhongxu(root.right)
zhongxu(root)
for i in range(1,len(res)):
#print(res[i-1])
if res[i]<res[i-1]:
return False
return True
##### 区间递归的方式,思路上是这样的:首先对于root.val来说,其对应的初始区间为(-inf,inf),
那么根据题意root.left.val区间为(-inf,root.val),同理root.right.val的区间为(root.val,inf)
这样就一定能满足root.left.val<root.val<root.right.val,对每一个节点这么递归,最后取&即可。
中序遍历的思路也很清晰,就是遍历之后的数组一定是一个严格单点递增的数组,for 循环一下就解决了。