LeetCode 刷题 [C++] 第98题.验证二叉搜索树

题目描述

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

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

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

题目分析

由题目可知,二叉搜索树的特征:二叉搜索树的左子树上所有节点的值均小于根节点;右子树上所有节点的值均大于根节点的值;它的左右子树也是二叉搜索树。

因此,我们可以使用递归思想来解决这个问题:

  1. 递归结束条件为当前访问节点为空时,返回true;
  2. 检查当前节点的左子树,若返回false,则直接返回,结束查询;
  3. 检查当前节点的值是否合法,不合法返回false;
  4. 检查当前节点的右子树,并返回其和左子树的与值。

Code

cpp 复制代码
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        return helper(root, LONG_MIN, LONG_MAX);
    }
private:
    bool helper(TreeNode* root, long long lower, long long upper) {
        if (nullptr == root) {
            return true;
        }
        bool lf = helper(root->left, lower, root->val);
        if (!lf) {
            return false;
        }
        if (root->val <= lower || root->val >= upper) {
            return false;
        }
        return lf && helper(root->right, root->val, upper);
    }
};
相关推荐
在风中的意志14 小时前
[数据库SQL] [leetcode-175] 175. 组合两个表
数据库·sql·leetcode
圣保罗的大教堂14 小时前
leetcode 1970. 你能穿过矩阵的最后一天 困难
leetcode
yugi98783814 小时前
MFCC特征提取与SVM训练语音识别
算法·支持向量机·语音识别
yuanmenghao15 小时前
MSAC 算法详解以及与 RANSAC 对比示例
算法·自动驾驶·聚类·ransac·msac·系统辨识‘
造夢先森15 小时前
常见数据结构及算法
数据结构·算法·leetcode·贪心算法·动态规划
listhi52015 小时前
基于蒙特卡洛方法处理电力系统负荷不确定性的解决方案
算法
iAkuya15 小时前
(leetcode)力扣100 29删除链表的倒数第 N 个结点(双指针)
算法·leetcode·链表
@卞15 小时前
01_树的 dfs 序
算法·深度优先
isyoungboy15 小时前
洪水法实现Region RLE的fill_up算法
算法
2401_8414956415 小时前
自然语言处理实战——基于BP神经网络的命名实体识别
人工智能·python·神经网络·算法·机器学习·自然语言处理·命名实体识别