题解 | #判断是不是二叉搜索树#
判断是不是二叉搜索树
https://www.nowcoder.com/practice/a69242b39baf45dea217815c7dedb52b
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @return bool布尔型
#
class Solution:
def dfs(self , root: TreeNode):
# write code here
leftb = rightb = True
maxc = root.val
maxleft = maxright = float("-inf")
minc = root.val
minleft = minright = float("inf")
if root.left is not None:
if root.left.val>root.val:
return False, root.left.val, root.val
leftb, maxleft, minleft = self.dfs(root.left)
if maxleft>root.val:
leftb = False
if root.right is not None:
if root.right.val<root.val:
return False, root.val, root.right.val
rightb,maxright,minright = self.dfs(root.right)
if minright<root.val:
rightb = False
maxc = max(maxc,max(maxleft,maxright))
minc = min(minc,min(minleft,minright))
return (leftb and rightb),maxc,minc
def isValidBST(self , root: TreeNode) -> bool:
# write code here
res,maxc,minc = self.dfs(root)
return res

