当前位置: 首页 > article >正文

验证二叉搜索数(98)

98. 验证二叉搜索树 - 力扣(LeetCode)

解法:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool isValidBST(TreeNode* root) 
    {
        if ((root == nullptr) ||
            (root->left == nullptr && root->right == nullptr)) 
        {
            return true;
        }

        //考虑到Node.val 的取值范围:-2exp(31) <= Node.val <= 2exp(31) - 1,bound代表二叉搜索数一个节点需要满足的值的范围,所以搜索二叉树初始化的最小值和最大值:
        std::pair<int64_t, int64_t> bound = std::make_pair(int64_t(numeric_limits<int32_t>::min()) - 1, int64_t(numeric_limits<int32_t>::max()) + 1);

        return isValidBSTCore(root, bound);
        
    }

    bool isValidBSTCore(TreeNode* root, std::pair<int64_t, int64_t> bound)
    {
        if (root == nullptr) {
            return true;
        }
        //前序遍历,先访问当前节点
        if (root->val > bound.first && root->val < bound.second ) 
        {
            //访问左子树,以及计算其取值范围 && 访问又子树 以及计算其取值范围
            return isValidBSTCore(root->left, std::make_pair(bound.first, std::min(int64_t(root->val),bound.second))) && isValidBSTCore(root->right, std::make_pair(std::max(int64_t(root->val), bound.first), bound.second));
        }else {
            return false;
        }
    }
};

总结:

计算时间复杂度O(N),其空间复杂度O(N),具体算法如上述代码和注释。


http://www.kler.cn/a/527279.html

相关文章:

  • nodejs:express + js-mdict 网页查询英汉词典
  • 【linux】Linux 常见目录特性、权限和功能
  • AI 的安全性与合规性:实践中的最佳安全策略
  • Java---猜数字游戏
  • 基于Python的人工智能患者风险评估预测模型构建与应用研究(下)
  • AboutDialog组件的功能和用法
  • 【算法】动态规划专题① ——线性DP python
  • 理解动手学深度学习的自编包d2l
  • 青少年编程与数学 02-008 Pyhon语言编程基础 05课题、数据类型
  • 【Elasticsearch】match_bool_prefix 查询 vs match_phrase_prefix 查询
  • DeepSeek的使用技巧介绍
  • SARIMA介绍
  • 【TCP协议】流量控制 滑动窗口
  • 高速PCB设计指南5——电磁干扰和电磁兼容
  • CSDN的历史
  • Flink Connector 写入 Iceberg 流程源码解析_confluent icebergsinkconnector
  • git push到远程仓库时无法推送大文件
  • DeepSeek - R1:AI 推理模型的技术深度剖析与行业影响
  • 浅析 SSH 免密登录原理
  • 五. Redis 配置内容(详细配置说明)
  • C语言:创建带头结点的动态链表:解析与实现
  • Three.js 中实现自定义光圈 Shader 效果
  • 强化学习笔记——4策略迭代、值迭代、TD算法
  • 使用PaddlePaddle实现逻辑回归:从训练到模型保存与加载
  • 16进制(十六进制)和二进制之间的转换
  • Java开发vscode环境搭建