解法一
首先是直接使用递归的方法解决,对于每层结果,需要判断根节点的值是否满足最大最小值的要求
# 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 isBST(self, root, mi, ma):
if root is None:
return True
result = True
if root.val > mi and root.val < ma:
result = True
else:
result = False
if not self.isBST(root.left, mi, root.val):
return False
if not self.isBST(root.right, root.val, ma):
return False
return result
def isValidBST(self, root: TreeNode) -> bool:
import sys
max_value = sys.maxsize
min_value = -sys.maxsize - 1
return self.isBST(root, min_value, max_value)
解法二
由于对二叉查找树进行中序遍历即可得到一个顺序的数组,所以可以利用这个特性进行求解。
# 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 inOrder(self, root):
"""
中序
:param root:
:return:
"""
if root is None:
return []
result = []
if root.left:
result += self.inOrder(root.left)
result.append(root.val)
if root.right:
result += (self.inOrder(root.right))
return result
def isValidBST(self, root: TreeNode) -> bool:
inorder_list = self.inOrder(root)
for i in range(1, len(inorder_list)):
if inorder_list[i] > inorder_list[i-1]:
continue
else:
return False
return True
网友评论