leetcode每日一练-第98题- 验证二叉搜索树

一、思路

因为要验证多个节点是否是二叉搜索树,因此使用递归

二、解题方法

设计一个递归函数 helper(root, lower, upper) 来递归判断,函数表示考虑以 root 为根的子树,判断子树中所有节点的值是否都在 (l,r)的范围内(注意是开区间)。如果 root 节点的值 val 不在 (l,r)的范围内说明不满足条件直接返回,否则我们要继续递归调用检查它的左右子树是否满足,如果都满足才说明这是一棵二叉搜索树。

那么根据二叉搜索树的性质,在++递归调用左子树++ 时,我们需要++把上界 upper 改为 root.val++ ,即调用 ++helper(root.left, lower, root.val)++ ,因为左子树里所有节点的值均小于它的根节点的值。同理++递归调用右子树时++ ,我们需要++把下界 lower 改为 root.val++ ,即调用 ++helper(root.right, root.val, upper)++。

函数递归调用的入口为 helper(root, -inf, +inf), inf 表示一个无穷大的值。

三、code

复制代码
class Solution {
public:

    bool helper(TreeNode* root,long long lower,long long upper)
    {
        if(root==nullptr)
        {
            return true;// 基本情况:子树为空,认为是合法的BST
        }
        if(root->val <= lower || root->val >= upper)
        {
            return false;// 节点值不在允许范围内,子树不是有效的BST
        }
        return helper(root->left,lower,root->val)&&helper(root->right,root->val,upper);
    }
    bool isValidBST(TreeNode* root) {
        return helper(root,LONG_MIN,LONG_MAX);

    }
};

=========================================================================学到的知识:

①当程序需要多次检验是否符合条件时,

需要用到递归方法

②结点的值

root->val

相关推荐
invicinble4 分钟前
对服务器资源的理解--理解用户请求,部署,服务器资源相关的映射层
开发语言
漫步人生走在路上7 分钟前
用小语种SEO突破外贸B2B天花板:法语、德语市场的实测数据
开发语言·前端·javascript·人工智能·搜索引擎·ecmascript
yuniko-n15 分钟前
【JUC】线程池
java·开发语言
dwm8888888825 分钟前
c# 创建使用本地NuGet包
开发语言·c#
2601_9628857233 分钟前
如何用 Python 获取上证指数、沪深300、中证500 等指数行情?
开发语言·python
Logic10140 分钟前
C语言/数据结构二维数组题解:找出行列O个数均为偶数的格子——奇偶性预处理+二次遍历
c语言·数据结构·算法·二维数组·时间复杂度·动态内存分配·奇偶性
程序猿阿森1 小时前
【机器学习实战】朴素贝叶斯算法详解:从概率基础到商品评论情感分析
算法·机器学习·概率论
余额瞒着我当琳1 小时前
哈希表底层原理解析,直接定址法,哈希冲突,负载因子,哈希函数,开放定址法
java·c++·哈希算法·散列表
张张123y1 小时前
后端第六课:Python 语法速通(0 基础入门,AI 应用开发的第一门语言)
开发语言·人工智能·python·ai·后端开发
Want5951 小时前
Python跳动的爱心①
开发语言·python·数学建模