181.二叉树:验证二叉树(力扣)

news2024/11/28 23:46:35

代码解决

/**
 * 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:
    // 用于记录中序遍历过程中的前一个节点
    TreeNode* pre = nullptr;

    bool isValidBST(TreeNode* root) 
    {
        // 如果根节点为空,说明是一棵空树,返回true
        if(root == nullptr) return true;

        // 遍历左子树
        bool left = isValidBST(root->left);

        // 如果当前节点的值小于等于中序遍历的前一个节点值(pre)
        if(pre != nullptr && pre->val >= root->val)
            return false; // 不满足BST定义,返回false

        // 更新前一个节点为当前节点
        pre = root;

        // 继续遍历右子树
        bool right = isValidBST(root->right);

        // 返回左右子树是否都满足BST的结果
        return left && right;
    }
};

代码使用了递归的方法。主要思路是从根节点开始,递归地检查左右子树。在递归过程中,使用一个全局变量 pre 来记录中序遍历过程中的前一个节点,以确保每个节点的值都大于前一个节点的值。

这里简要解释一下代码的工作流程:

  1. 定义一个全局变量 pre 用于记录中序遍历过程中的前一个节点。
  2. 定义一个辅助函数 isValidBST,它接受当前节点作为参数。
  3. 首先检查当前节点是否为空,如果是,返回 true
  4. 递归地检查左子树,并返回其结果。
  5. 如果当前节点的值小于等于中序遍历的前一个节点值 pre,返回 false
  6. 更新 pre 为当前节点。
  7. 递归地检查右子树,并返回其结果。
  8. 返回左右子树都满足条件的布尔值。

这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是树中节点的数量。空间复杂度也是 O(n),因为需要存储递归调用的栈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1815786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】GANs网络在图像和视频技术中的应用前景

📝个人主页:哈__ 期待您的关注 目录 1. 🔥引言 背景介绍 研究意义 2. 🎈GANs的基本概念和工作原理 生成对抗网络简介 工作原理 3. 🤖GANs在图像生成中的应用 图像超分辨率 工作原理 图像去噪 工作原理 图…

【附带源码】机械臂MoveIt2极简教程(五)、第二个demo - rviz可视化

系列文章目录 【附带源码】机械臂MoveIt2极简教程(一)、moveit2安装 【附带源码】机械臂MoveIt2极简教程(二)、move_group交互 【附带源码】机械臂MoveIt2极简教程(三)、URDF/SRDF介绍 【附带源码】机械臂MoveIt2极简教程(四)、第一个入门demo 【附带源码】机械臂Move…

森林(fsc)认证的主要目的是什么?

森林认证(Forest Certification)的目的主要是为了确保森林的可持续经营,同时保护生态环境、生物多样性和社区权益。以下是森林认证的主要目的: 促进可持续森林管理: 森林认证鼓励采用可持续的森林管理方法&#xff0c…

(CVPR,2024)Adversarial Prompt Tuning:只需一个提示词就足以提升预训练视觉-语言模型的对抗性鲁棒性

文章目录 相关资料摘要引言对抗性鲁棒性的文本提示CLIP回顾 方法提示参数化提示优化 实验 相关资料 论文:[2403.01849] One Prompt Word is Enough to Boost Adversarial Robustness for Pre-trained Vision-Language Models (arxiv.org) 代码:TreeLLi…

私生子女是否拥有平等的继承权

私生子女,是否拥有平等的继承权?在当今社会,随着人们思想观念的不断开放和变化,家庭结构也日益多样化。其中,私生子女的存在成为了一个不可回避的话题。那么,私生子女是否应该享有与婚生子女同等的继承权呢…

解读surging 的内存过高的原因

前言 对于.NET开发人员来讲,一个程序占用内存过高,是极其糟糕,是一款不合格的程序软件,.NET开发人员也不会去使用服务器垃圾收集器(ServerGarbageCollection),而是选用工作站垃圾收集器,而是对于一款低内存的程序更能给…

【丝滑的LangChain】我用python问gpt认不认识小范大人,它告诉我认识个der~

前言 嗨,大家好!我是海鸽。 《庆余年2》刚刚完结,热度不减,我忍不住好奇:我们的AI伙伴GPT,是否也对剧中那位机智过人的小范大人有所耳闻? 最近我们尝试了LangChain的调用,体验了一…

单目标应用:基于人工原生动物优化器APO的微电网优化(MATLAB代码)

一、微电网模型介绍 微电网多目标优化调度模型简介_vmgpqv-CSDN博客 参考文献: [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、人工原生动物优化算法求解微电网 2.1算法简介 人工原生动物优化器&am…

NewStarCTF_RE(week1,2)

[NewStarCTF 2023 公开赛道]easy_RE ida 可能会把 一个数组或字符串拆开,可以通过计算地址,知道是一起的 也有的会藏在汇编窗口 Segments IDA的Segments窗口 :shiftf7 https://www.cnblogs.com/sch01ar/p/9477697.html ida 各种窗口也是需要…

C++ 10 之 引用

c10引用.cpp #include <iostream>using namespace std;int main() {// 引用的语法&#xff1a;类型 &别名 原名// int a 10;// int &b a; // 此时a,b指向同一块内存// cout << "a: " << a << endl;// cout << "b: &…

安装sqlserver2022 express

1、下载 SQL Server 下载 | Microsoft 双击sql2022-ssei-expr 2、安装 下载完成以后&#xff0c;将会出现以下对话框 &#xff1a; 点击【全新SQL Server独立安装或向现有安全添加功能】 下一步&#xff0c;下一步&#xff1a; 下一步&#xff1a; 下一步&#xff0c;这里我…

学习笔记——路由网络基础——路由优先级(preference)

1、路由优先级(preference) 路由优先级(preference)代表路由的优先程度。当路由器从多种不同的途径获知到达同一个目的网段的路由(这些路由的目的网络地址及网络掩码均相同)时&#xff0c;路由器会比较这些路由的优先级&#xff0c;优选优先级值最小的路由。 路由来源的优先…

【星海随笔】云解决方案学习日志篇(一) ELK,kibana,Logstash安装

心路历程 本来想最近再研究研究DPDK的。但是自己做一个东西很多时候没有回报。因为自己的低学历问题&#xff0c;类似工作的面试都没有。所以很多东西学了很快就忘了&#xff0c;没有地方可以用。 今天看到了一个大佬,除了发型外,很多想法还是很共鸣的。 Shay Banon 决定开始跟…

2024年6月11日 (周二) 叶子游戏新闻

万能嗅探: 实测 网页打开 某视频号、某音、某红薯、某站&#xff0c;可以做到无水印的视频和封面下载功能哦&#xff0c;具体玩法大家自行发挥吧。 WPS免登录一键修改器: 去除烦人的登录且能正常使用 日本一首部游戏《拼图世界》上架Steam 30年PS名作日本游戏厂商日本一的首部品…

Keil一键添加.c文件和头文件路径脚本--可遍历添加整个文件夹

最近想移植个LVGL玩玩&#xff0c;发现文件实在是太多了&#xff0c;加的手疼都没搞完&#xff0c;实在不想搞了就去找脚本和工具&#xff0c;基本没找到一个。。。。。。 主要是自己也懒得去研究写脚本&#xff0c;偶然搜到了一个博主写的脚本&#xff0c;原博客地址:https:/…

前端传递bool型后端用int收不到

文章目录 背景模拟错误点解决方法 背景 我前几天遇到一个低级错误&#xff0c;就是我前端发一个请求&#xff0c;把参数送到后端&#xff0c;但是我参数里面无意间传的布尔型&#xff08;刚开始一直没注意到&#xff0c;因为当时参数有十几个&#xff09;&#xff0c;但是我后…

CMS与AI的融合:构建万能表单小程序系统

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;MyCMS作为一款功能强大的内容管理系统&#xff0c;通过集成AI技术&#xff0c;进一步拓展了其应用范围和智能化水平。本文将探讨如何利用MyCMS结合AI技术&#xff0c;构建一个能够将用户提交的万能表单数据转化为智能提…

【Nginx系列】基于请求头的分发

文章目录 一、HTTP请求头和响应头二、基于请求头的分发2.1、基于host分发2.2、基于域名的分发测试&#xff1a;2.3、基于开发语言分发2.4、基于浏览器分发2.5、基于源IP分发 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能…

上新即爆品?2024小红书爆款黄金公式

5月&#xff0c;小红书正式上线了平台级新品营销IP——“宝藏新品”&#xff0c;旨在消费愈发审慎的当下&#xff0c;帮助品牌破除不确定性&#xff0c;达成新品的高质量生长。 本期千瓜将进一步解读「宝藏新品」策略&#xff0c;帮助品牌推新呈现更多样化的成长可能。 强种草…

PyTorch中配置CUDA

第零部分&#xff1a; 首先查看CUDA版本 打开cmd&#xff0c;输入&#xff1a;nvidia-smi 可以看到CUDA的版本&#xff0c;后面安装的pytorch相关的库不高于这个版本的就行。 这里CUDA的版本是12.5&#xff0c;但是由于pytorch目前最高支持的cuda版本是12.1&#xff08;在下…