leetcode_98 验证二叉搜索树

884 阅读1分钟

要求

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

image.png

输入:root = [2,1,3]
输出:true

示例 2:

image.png

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4

核心代码

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
        
class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        inorder = list()

        self.inorderTra(root,inorder)

        for i in range(len(inorder)-1):
            if inorder[i] >= inorder[i+1]:
                return False
        return True

    def inorderTra(self,root,inorder):
        if not root:
            return None
        
        self.inorderTra(root.left,inorder)
        inorder.append(root.val)
        self.inorderTra(root.right,inorder)

        return 

image.png

解题思路:这个题的解题思路使用的就是中序遍历,因为我们的左子树的值都比根节点小,右子树的值都比根节点大,所以如果是二叉搜索树的中序遍历后得到的就是排好序的列表,我们只需要检测这个数据是不是从小到大的就行了。