美文网首页
98. Validate Binary Search Tree是

98. Validate Binary Search Tree是

作者: 羲牧 | 来源:发表于2020-07-05 14:31 被阅读0次

解法一
首先是直接使用递归的方法解决,对于每层结果,需要判断根节点的值是否满足最大最小值的要求

# 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
        
        

相关文章

网友评论

      本文标题:98. Validate Binary Search Tree是

      本文链接:https://www.haomeiwen.com/subject/kfdvqktx.html