题解 | #判断是不是二叉搜索树#
判断是不是二叉搜索树
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 isValidBST(self, root: TreeNode) -> bool:
# write code here
if not root:
return False
if root.left:
if root.left.val > root.val:
return False
if root.right:
if root.right.val < root.val:
return False
if root.right and root.left:
return self.dfs(root.left, 'left', root.val) and self.dfs(root.right, 'right', root.val)
elif root.right:
return self.dfs(root.right, 'right', root.val)
elif root.left:
return self.dfs(root.left, 'left', root.val)
else:
return True
def dfs(self, node: TreeNode, d: str, rootVal: int) -> bool:
if not node.left and not node.right:
return True
if node.left:
if node.left.val > node.val:
return False
if d == 'right':
if node.left.val < rootVal:
return False
if node.right:
if node.right.val < node.val:
return False
if d == 'left':
if node.right.val > rootVal:
return False
if node.right and node.left:
return self.dfs(node.left, d, rootVal) and self.dfs(node.right,d,rootVal)
elif node.right:
return self.dfs(node.right, d, rootVal)
else:
return self.dfs(node.left, d, rootVal)
