LeetCode50天刷题计划第二季(Day 7 — 验证二叉搜索树(15.00-16.00

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

写代码10分钟,debug两小时

一、题目

验证二叉搜索树

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

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

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

示例

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

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

提示:

树中节点数目范围在[1, 104]-231 <= Node.val <= 231 - 1

二、思路

一开始想着,对于每个根结点,检查其左右孩子是否符合要求,然后检查子树,但这种方法只能检查子树的根结点,检查不出来是否子树中所有节点都能满足条件。
因此考虑,如果使用递归的方法,需要递归地的给每个结点设置一个区间,判断结点值是否在区间内,
这个区间根据根结点的值动态变化:对于左子树,用根节点的值作为右边界;对于右子树,用根节点的值作为左边界。

注意边界条件的选择,因为题目中给的值是-231 <= Node.val <= 231 - 1,因此边界设置为了:

  MIN=-pow(2,31)-1 ; MAX=pow(2,31)

就当是val都是整数吧hhhh~

三、代码

# 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 isValidBST(self, root: Optional[TreeNode]) -> bool:
        MIN=-pow(2,31)-1 #设置边界
        MAX=pow(2,31)
        def isBST(root,l,r):
            if(root == None ): #根结点为空
                return True
            if(root.val<=l or root.val>=r): #根节点值越界
                return False
            Left=isBST(root.left,l,root.val) #递归,
            Right=isBST(root.right,root.val,r)
            return Left and Right #判断
        return isBST(root,MIN,MAX) #返回
           

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值