【leetcode】98 验证二叉搜索树

20200505每日一题

题目描述

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

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

分析

1.递归

直接递归判断左右子树的val是否在一个范围内

根节点范围确定为负无穷到正无穷

左子树范围为负无穷到根节点

右子树范围为根节点到正无穷

 

2.结合中序遍历

若把二叉树中序遍历存为一个列表,则每一个val均大于前一个val

注意是大于,临界值等于不可!

 

解题

1.


# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class
Solution: def isValidBST(self, root: TreeNode) -> bool: def digui(node, lower, upper): if not node: return True mid = node.val if not lower < mid < upper: return False return digui(node.left,lower,mid) and digui(node.right,mid,upper) return digui(root,float('-inf'),float('inf'))

 2.

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        mid=[]
        def mid_trav(node):
            if not node:
                return True
            if node.left:
                mid_trav(node.left)
            mid.append(node.val)
            if node.right:
                mid_trav(node.right)
        mid_trav(root)
        if(mid == sorted(mid) and len(set(mid)) == len(mid)):
            return True
        else:
            return False

 

posted @ 2020-05-05 22:32  Flora1014444  阅读(131)  评论(0编辑  收藏  举报