给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/validate-binary-search-tree
例:
输入:root = [2,1,3] 输出:true
解析:
中序遍历,将遍历后的值存入列表,然后对列表进行去重,排序操作,如果和原列表一致,那么代表为二叉搜索树。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def isValidBST(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
nums = self.search(root)
return sorted(set(nums)) == nums # sorted()用来排序,set()用来去重
def search(self, root): # 搜索函数
if root == None: # 判空
return []
return self.search(root.left) + [root.val] + self.search(root.right) # 左子树 + 根 + 右子树(中序遍历)