算法-二叉树篇18-验证二叉搜索树

DrMOS电路仿真 将驱动电路与功率MOS集成化后既是DrMOS。把驱动芯片以及上下桥MOSFET封装在一起,这样每一相供电就有了单独的驱动芯片,并且这种高度整合的MOSFET可以通过更高的电流、发热比传统的MOSFET也小很多且更节能 自举升压同步BUCK高低侧栅驱动电路原理及仿真 ... 阅读详情

验证二叉搜索树

力扣题目链接

题目描述

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

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

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

解题思路

这道题目可以直接递归每个节点然后对左右节点比较大小,比较简单,所以我就当复习迭代法中序遍历二叉树了,可以不像我写的那么复杂。
关于中序遍历的方法,就是返回中序遍历的序列然后判断单调性即可,思路上也是比较简单的。

题解

直接验证法
class Solution {
private:
    vector<int> vec;
    void traversal(TreeNode* root) {
        if (root == NULL) return;
        traversal(root->left);
        vec.push_back(root->val); // 将二叉搜索树转换为有序数组
        traversal(root->right);
    }
public:
    bool isValidBST(TreeNode* root) {
        vec.clear(); // 不加这句在leetcode上也可以过,但最好加上
        traversal(root);
        for (int i = 1; i < vec.size(); i++) {
            // 注意要小于等于,搜索树里不能有相同元素
            if (vec[i] <= vec[i - 1]) return false;
        }
        return true;
    }
};
中序遍历加单调法
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        if(!root){
            return true;
        }

        stack<TreeNode*> st;
        TreeNode* cur = root;
        vector<int> arr;
        while(!st.empty() || cur != NULL){
            if(cur != NULL){
                st.push(cur);
                cur = cur->left;
            }
            else{
                cur = st.top();
                st.pop();
                arr.push_back(cur->val);
                cur = cur->right;
            }
        }

        for(int i = 1; i < arr.size(); i++){
            if(arr[i - 1] >= arr[i]){
                return false;
            }
        }

        return true;
    }
};

总结

两种方法在性能上提交力扣后几乎一样,第一个递归在二叉树节点多时栈上数据多,而第二个需要一个额外的数组来存,然后再遍历一遍。二者在数据量不是特别大的情况下没有什么很大的开销,具体看大家的取舍了。

《探秘 BME680温度湿度气压气体传感器模块:环境感知的卓越之选》:此文为AI自动生成 BME680 是一款由博世公司推出的集成环境传感器模块,在环境监测和物联网等领域中发挥着重要作用。它能够同时测量温度、湿度、气压和气体浓度等多个环境参数,为各种应用提供准确可靠的环境数据。该模块采用小巧的封装形式,便于集成到各种设备中,无论是智能家居、可穿戴设备还是工业监测系统,都能轻松适配。例如,在智能家居系统中,BME680 模块可以监测室内环境参数,如温度、湿度、气压和空气质量等。通过与智能家居控制器或智能手机应用程序的连接,用户可以实时了解室内环境状况,并根据需要进行调整。 阅读详情

相关推荐

强化学习入门8—深入理解DDPG

本文是强化学习入门系列的第八篇,前面我们讲Actor-Critic时提到了DDPG。DDPG是google DeepMind团队提出的一种用于输出确定性动作的算法,它解决了Actor-Critic 神经网络每次参数更新前后都存在相关性,导致神经网络只能片面的看待问题这一缺点。同时也解决了DQN不能用于连续性动作的缺点。

小菜羊的博客 4314

[Lc_2 二叉树dfs_2] 验证二叉搜索树 | 第K小的元素 | 二叉树的所有路径

1.全局变量 2. 回溯 3.剪枝 | 全局变量 不好手动 恢复现场,那就 参数 自动 恢复现场

No Game No Life 1558

hive sql每个用户的累积访问次数

我们有如下的用户访问数据 userId visitDate visitCount u01 2017/1/21 5 u02 2017/1/23 6 u03 2017/1/22 8 u04 2017/1/20 3 u01 2017/1/23 6 u01 2017/2/21 8 U02 2017/1/23 6 U01 2017/2/22 4 要求使用SQL...

weixin_39150719的博客 3483

代码随想录算法训练营第18天| LeetCode654. 最大二叉树 | 617.合并二叉树 | 700.二叉搜索树中的搜索 | 98.验证二叉搜索树

二叉树专题part05,构造二叉树,合并二叉树,二叉搜索树

qq_45077485的博客 1046

在 Linux 虚拟机中手动安装 VMware Tools

对于 Linux 虚拟机,您可以从命令行手动安装 VMware Tools。对于 Linux 的较高发行版,请使用集成的 open-vm-tools 版本。 前提条件 有关 open-vm-tools 的操作系统兼容性的详细信息,请参见《VMware 兼容性指南》,网址为VMware Compatibility Guide - System Search。 开启虚拟机。 确认客户机操作系统正在运行。 因为 VMware Tools 安装程序是使用 Perl 编写的,请确认已在客户机操作系统中安..

m0_62526815的博客 1757

说说PSTN、ISDN、 ADSL三种互联网接入方式的区别。

互联网的接入方式: 电话拨号接入(PSTN) ISDN接入 ADSL接入 Cable MODEM接入 局域网接入 光纤接入(FDDI) 卫星接入 DDN专线 目前来说,ADSL和Cable MODEM比较常用,今天我们就先来说说PSTN、ISDN和ADSL的区别。 电话拨号接入(PSTN/POTS,Public Switched Telephone Network / Public Oold Telephone Service) 数据终端设备(DTE)通过数据通信设备(DCE)再连

Winyaz的博客 2万+

刷题计划day18 二叉树(七)【合并二叉树】【​二叉搜索树中的搜索】【验证二叉搜索树】

刷题计划day18 二叉树(七),二叉树共十期,加油!【合并二叉树】【​二叉搜索树中的搜索】【验证二叉搜索树】

weixin_72499901的博客 931

【架构师面试-缓存与搜索-1】-缓存与缓存置换策略源码实现

1:什么是缓存 缓存:加速数据访问的存储,降低延迟(latency),提升吞吐量(Throughput)的利器。 1:缓存演进历史 1. 查库 2. ConcurrentHashMap 3. LRU 4. Guava Cache 5. 分布式缓存(redis,MemCache) 6. 多级缓存 2:在什么地方加缓存 缓存对于每个开发者来说是相当熟悉了,为了提高程序的性能我们会去加缓存,但是在什么地方加缓存,如何加缓存呢? 举个栗子:假设一个网站,需要提高性能,缓存可以放在浏览器,可以放

chongfa2008的博客 6440

算法训练营day20(二叉树06:最大二叉树,合并二叉树,搜索二叉树,验证搜索二叉树)

/中序遍历,如果在递归左子树之前就已经更新了 maxval,那么左子树的有效性检查会失败,因为它会试图用更新后的 maxval 与左子树的节点值进行比较,而不再是根节点的合法值。public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {//前序遍历,中左右。//前序遍历,有了当前节点再往下连子节点。//先写出递归条件,也就是数组遍历到最后。//构造root节点并赋值。//根据max构造root。//定义函数返回root。

weixin_61931006的博客 1157

海思SD3403/SS928V100开发(6)单路GMSL-MIPI-YUV相机视频输入调试

硬件连接:森云GMSL相机 -> GMSL 解串器 -> SD3403 MIPI0暂时先进行单路视频输入通路调试。

jzwjzw19900922的博客 1934

【Agent实战】Anthropic Skills、MCP与LangGraph的工程实践

随着大语言模型(LLM)应用从简单的Chatbot向自主智能体(Autonomous Agents)演进,如何管理复杂的任务上下文、标准化的工具调用以及确定性的业务流程,成为了系统设计的核心挑战。Anthropic 推出的 Skills 规范,结合 Model Context Protocol (MCP) 与 Function Calling,为构建模块化、可扩展的 Agent 提供了全新的范式。

kakaZhui的博客 584

代码随想录算法训练营 day17 | 654.最大二叉树、 617.合并二叉树、 700.二叉搜索树中的搜索、 98.验证二叉搜索树

通过将maxIndex初始化为leftIndex,你确保了程序能正确地从区间内的第一个元素开始找最大值。然后,通过遍历更新它,最终找到该区间内的最大元素及其位置。在这段代码中,结束索引rightIndex的值传递给了函数,它表示当前递归过程中考虑的数组的右边界。在代码中,rightIndex作为右边界表示区间的“开区间”部分,即右边界是不包含在内的。leftIndex表示“闭区间”的左边界,即左边界是包含的。因此,整个区间采用了左闭右开的方式,确保递归能够覆盖从leftIndex到。

weixin_46053950的博客 763

【无人机路径规划】基于强化学习实现多无人机路径规划附matlab代码

1 简介 本文提出一种基于强化学习实现多无人机路径规划。​ 2 部分代码 % This is used to measure the path length, service rate and risk explosure for each UAVs %% parameters function [PL,ServiceRate,Risk]=measure global N2; % divide [0,1]*[0,1] map into N2*N2 grid when calcul

qq_59747472的博客 6907

算法题解(二叉树篇)

文章目录递归算法三要素二叉树理论基础144. 二叉树的前序遍历 - 12.1394. 二叉树的中序遍历 - 12.13145. 二叉树的后序遍历 - 12.13102. 二叉树的层序遍历 - 12.13107. 二叉树的层序遍历 II - 12.14 递归算法三要素 以前序遍历为例: 1、确定递归函数的参数和返回值:因为要打印出前序遍历节点的数值,所以参数里需要传入List在放节点的数值,除了这一点就不需要在处理什么数据了也不需要有返回值,所以递归函数返回类型就是void,代码如下: void trave

x-dragon8899的博客 822

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

代码随想录算法训练营第十七天|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。

weixin_47748259的博客 1159

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

代码随想录训练营Day18 | 654. 最大二叉树 | 617. 合并二叉树 | 700.二叉搜索树中的搜索 | 98.验证二叉搜索树

因为是传入了两个树,那么就有两个树遍历的节点t1 和 t2,如果t1 == NULL 了,两个树合并就应该是 t2 了(如果t2也为NULL也无所谓,合并之后就是NULL)。如果root->val > val,搜索左子树,如果root->val < val,就搜索右子树,最后如果都没有搜索到,就返回NULL。- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。

m0_68965961的博客 955

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

算法训练营Day18

例如,当递归检查左子树时,会将当前节点的值作为新的上界传递给左子树的递归调用,因为左子树中的所有节点都应该小于这个上界(即当前节点的值)。使用 `Long.MIN_VALUE` 和 `Long.MAX_VALUE` 作为初始的下界(lower)和上界(upper)是为了确保在初始调用时,所有可能的 `int` 值都在这个范围内。类似地,对于右子节点,其值必须大于其父节点的值,并且小于或等于其所有祖先节点中右侧的最大值(这就是为什么我们用 `Long.MAX_VALUE` 作为初始的上界)。

momolinshaomo的博客 1811

代码随想录算法训练营第18天|654. 最大二叉树、617.合并二叉树、700. 二叉搜索树中的搜索、98.验证二叉搜索树

标答思路:终止条件,在数组中只有一个元素的时候构造一个新节点返回;单层逻辑,找到数组中最大值以及对应的下标,根据下标左区间构造左子树,需要判断最大值下标大于0,以确保左子树至少有一个值,同理,要判断最大值下标小于数组长度减一,以确保右子树至少有一个值。(1)不能单纯的比较左节点小于中间节点,右节点大于中间节点。要比较的是左子树的所有节点都小于中间节点,右子树的所有节点都大于中间节点。(2)建议避免初始化最小值,因此做出改进,取到最左面的节点数值来比较。递归法,利用中序递增性质,转换成数组。

Yinems的博客 414

java算法day18

昨天在后序和中序遍历构建二叉树中学到了一种构建树的新方法,每层都new一个新节点,然后对其左右子树进行递归,在返回的时候建立节点与节点之间的联系,所以返回值就是该层构建好的节点,由于是归的过程建立的联系,那么归到某一层的时候,该层返回的节点,他的下面的结构都是已经构造好了。3.递归定义子节点的范围,对于任何节点,其左子节点的值必须小于该节点的值,单要大于该节点的下界。其右子节点的值必须大于该节点的值,并且小于该节点的上界。从这个图里可以看到,上层的约束,已经带到下层去了,而且这个范围在不断的收缩。

TOMOT77的博客 617

17.树(6) | 最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树(h)

题解使用pre用于保存中序遍历中当前节点的前一节点,将其val与当前节点的val进行比较进行判断,如果cur为第一个节点,那么可以根据pre为空而跳过这一次比较,避免了测试用例的值可能是INT_MIN而导致的错误。如果只有一个节点有左/右子节点,就将该左/右子节点赋给左节点的左/右子节点。)自己的思路是递归查看当前节点是否满足val > 左子节点的val,且val < 右子节点的val,满足的话则递归判断左,右子节点是否满足,都满足的情况下才返回true,否则返回false。

weixin_43469527的博客 223

代码随想录算法训练营第十九天 | 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

代码随想录算法训练营第十九天 | 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

qq_41713240的博客 411

代码随想录算法训练营Day18 | LeetCode | 654.最大二叉树 | 617.合并二叉树 | 700.二叉搜索树中的搜索 | 98.验证二叉搜索树

【代码】代码随想录算法训练营Day19 | LeetCode | 654.最大二叉树 | 617.合并二叉树 | 700.二叉搜索树中的搜索 | 98.验证二叉搜索树。

wonderlandlja的博客 868

代码随想录刷题记录day18之 最大二叉树+合并二叉树+搜索二叉搜索树中的值+验证二叉树

代码随想录刷题记录day18之 最大二叉树+合并二叉树+搜索二叉搜索树中的值+验证二叉树

weixin_47467016的博客 173

代码随想录算法训练营第17天 | 最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树

本题是 集合里元素可以用无数次,那么和组合问题的差别 其实仅在于 startIndex上的控制。

marongzhen的博客 199

leetcode 98. 验证二叉搜索树

leetcode 98. 验证二叉搜索树 题目详情 题目链接 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4 / \ 3 6...

qq_33789406的博客 151

代码随想录算法训练营第18天| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

思想:遍历一下这个数组找到最大值,根据该值的下标将数组分为两部分:左侧数组组成的左子树和右侧数组组成的右子树。所以采用相同的方法构造左孩子的最大二叉树和右孩子的最大二叉树。思想:二叉搜索树在中序遍历的情况下访问节点的值是逐渐增大的,所以只需要设置一个指针指向当前访问节点的前一个节点,判断这两个节点值的大小关系即可判断是否为二叉搜索树。思想:根据给出的val和根节点的值比较,相等则返回该节点,大于则分析右子树,小于则分析左子树。如果访问到叶子节点时val还是和这个节点的值不相等,则返回空指针。

meiqiuxiaohei的博客 212
上一篇: 算法-二叉树篇12-找树左下角的值
下一篇: 算法-二叉树篇19-二叉搜索树的最小绝对差
Buling_0
博客等级 码龄5年 232粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值