【代码随想录day20】验证二叉搜索树

news2024/11/29 10:48:07

题目 

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

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

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

思路

最开始想简单了,简单的以为只要满足左右孩子存在且左孩子大于等于root 或者 右孩子存在且右孩子小于等于root,就返回False,如果遇到空节点,说明以root为跟的树是二叉排序树。因为如果不是二叉排序树,那么从根节点出发,走到空节点之前就应该返回False了,根本不会出现空的情况。但这个错误在于它只会保持每三子节点组成的小结构是有序的,但整体不保证有序。

比如这个样例:[5,4,6,null,null,3,7],按照我的逻辑是true,因为对于每一个节点与它的左右孩子都是有序的,但是整体并不是有序的,应该返回false。

以下是错误代码示例:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True
        if (root.left and root.left.val>=root.val) or (root.right and root.val>=root.right.val):
            return False
        left = self.isValidBST(root.left)
        right = self.isValidBST(root.right)
        return left and right

正确思路是利用二叉排序树中序遍历序列是有序这个特性去做,弄一个self.max_记录当前节点之前的最大值,然后不断更新,如果发现当前节点<=self.max_说明这棵树不是二叉排序树,否则继续递归遍历,知道节点为空返回true。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def __init__(self):
        self.max_ = float('-inf')
        
    def isValidBST(self, root: Optional[TreeNode]) -> bool:
        if not root:
            return True
        left = self.isValidBST(root.left)
        if self.max_>=root.val:
            return False
        else:
            self.max_ = root.val
        right = self.isValidBST(root.right)
        return left and right

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

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

相关文章

Linux 学习记录58(ARM篇)

Linux 学习记录58(ARM篇) 本文目录 Linux 学习记录58(ARM篇)一、GIC相关寄存器1. 系统框图2. 中断号对应关系 二、GICD寄存器1. GICD_CTLR2. GICD_ISENABLERx3. GICD_IPRIORITYRx4. GICD_ITARGETSRx5. GICD_ICPENDRx 三、GICC寄存器1. GICC_PMR2. GICC_CTLR3. GICC_IAR4. GICC_…

JAVA面试总结-Redis篇章(五)——持久化

Java面试总结-Redis篇章&#xff08;五&#xff09;——持久化 1.RDBRDB全称Redis Database Backup file (Redis数据备份文件)&#xff0c;也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&#xff0c;从磁盘读取快照文件&#x…

持续贡献开源力量,棱镜七彩加入openKylin

近日&#xff0c;棱镜七彩签署 openKylin 社区 CLA&#xff08;Contributor License Agreement 贡献者许可协议&#xff09;&#xff0c;正式加入openKylin 开源社区。 棱镜七彩成立于2016年&#xff0c;是一家专注于开源安全、软件供应链安全的创新型科技企业。自成立以来&…

短视频账号矩阵系统源码开发部署路径

一、短视频批量剪辑的开发逻辑算法 1.视频剪辑之开发算法 自己研发视频剪辑是指通过对视频素材进行剪切、调整、合并等操作&#xff0c;利用后台计算机算法&#xff0c;进行抽帧抽组抽序进行排列以达到对视频内容进行修改和优化的目的。自己研发的视频剪辑工具可以通过后台码…

系统集成项目管理工程师挣值分析笔记大全

系统集成项目管理工程师挣值分析笔记大全 挣值分析是一种项目管理技术&#xff0c;用于量化和监控项目绩效。它通过比较计划值&#xff08;PV&#xff09;、实际成本&#xff08;AC&#xff09;和挣值&#xff08;EV&#xff09;三个参数来评估项目的进展情况和成本绩效。 挣值…

系统架构设计师-软件架构设计(3)

目录 一、软件架构风格&#xff08;其它分类&#xff09; 1、闭环控制结构&#xff08;过程控制&#xff09; 2、C2风格 3、MDA&#xff08;模型驱动架构 Model Driven Architecture&#xff09; 4、特定领域软件架构&#xff08;DSSA&#xff09; 4.1 DSSA基本活动及产出物…

《CUDA C++ Programming Guide》第一章 CUDA介绍

第一章 CUDA介绍 1.1 使用GPUs的好处 在相同的价格和功耗范围内&#xff0c;图形处理器 GPU 比 CPU 提供了更高的指令吞吐量和内存带宽, 许多应用程序利用这些更高的功能在 GPU 上比在 CPU 上运行得更快。相比较其他计算设备&#xff0c;如 FPGA&#xff0c;也是非常节能的&a…

协议和模型

1 规则 1.1 通信基础知识 不同网络的规模、形状和功能都存在很大差异。它们可以复杂到通过互联网来连接设备&#xff0c;也可以简单到直接将两台计算机用一根电缆连接&#xff0c;或者是介于这两种之间。然而&#xff0c;只是完成终端设备之间的有线或无线物理连接并不足以实…

MATLAB基础知识回顾

目录 1.帮助命令 2.数据类型 3.元胞数组和结构体 4.矩阵操作 4.1 矩阵的定义与构造 4.2 矩阵的四则运算 4.3 矩阵的下标 5.程序结构 5.1 for循环结构 5.2 分支结构 7.基本绘图操作 7.1.二维平面绘图 6.2 三维立体绘图 7.图形的保存与导出 8.补充 语句后⾯加;的作…

Kaggle图表内容识别大赛TOP方案汇总

赛题名称&#xff1a;Benetech - Making Graphs Accessible 赛题链接&#xff1a;https://www.kaggle.com/competitions/benetech-making-graphs-accessible 赛题背景 数以百万计的学生有学习、身体或视力障碍&#xff0c;导致人们无法阅读传统印刷品。这些学生无法访问科学…

人机合一Linux

未来云系统成为主流&#xff0c;维护电脑这种充满时代特性的技术&#xff0c;完全不重要了。 无论是学习还是工作&#xff0c;电脑都是IT人必不可少的重要武器&#xff0c;一台好电脑除了自身配置要经得起考验&#xff0c;后期主人对它的维护也是决定它寿命的重要因素&#xff…

【01trie】CF1851F

Problem - F - Codeforces 题意&#xff1a; 思路&#xff1a; 首先最大异或对可以用01trie解决 trie树入门_lamentropetion的博客-CSDN博客 ai xor x 和 aj xor x 都必须为1 因此可以转换为 ai 和 aj 最小异或对问题 改一下01trie的板子即可 主要修改部分在query上 p…

如何把视频中的背景删掉,AI抠像,瞬间换背景!

不用绿幕也能快速抠除视频背景。一个可以去除视频背景的AI智能抠像工具&#xff0c;上传视频后会自动去除背景&#xff0c;支持单人、多人等各类场景&#xff0c;智能扫描识别&#xff0c;发丝级细节处理&#xff0c;快捷高效。 随着AI 抠像技术的不断成熟和普及&#xff0c;我…

5-7月大更新!EasyOps®全平台34+新特性齐上线~

为了提供更好的产品使用体验&#xff0c;优维从未停止更新升级的脚步。在5-7月份&#xff0c;EasyOps全平台更新上线34新功能&#xff0c;涉及Hyperlnsight超融合监控、CMDB、DevOps、AutoOps、ITSM、公共服务&#xff0c;在不断的技术创新过程中&#xff0c;进一步加速IT运维效…

存算一体化(Processing in Memory, PIM)入门

一、 存算一体化 概念&#xff1a; 简单来说就是将存储资源中嵌入计算能力&#xff0c;以新的运算架构进行二维和三维矩阵乘法/加法运算。这样减少了数据频繁移动带来的延迟和能耗方面的开销。 背景&#xff1a; 虽然多核&#xff08;例如CPU&#xff09;/众核&#xff08;例…

视频监控综合管理平台EasyCVR多分屏默认播放协议的配置优化

视频监控综合管理平台EasyCVR具备视频融合汇聚能力&#xff0c;TSINGSEE青犀视频平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;包括&#xff1a;NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。国标GB28181视频平台Ea…

Mysql执行计划字段解释

文章目录 一、前言二、如何查看执行计划三、执行计划各字段解释四、select_type4.1、SIMPLE&#xff08;简单查询&#xff09;4.1.1、简单的单表查询4.1.2、多表连接查询 4.2、PRIMARY&#xff08;主查询&#xff09;4.2.1、包含复杂子查询的外层查询4.2.2、UNION语句中的第一个…

55寸透明屏有哪些主要特点?

55寸透明屏是一种新型的显示技术&#xff0c;它具有透明度高、色彩鲜艳、清晰度高等特点&#xff0c;可以广泛应用于商业展示、户外广告、智能家居等领域。 首先&#xff0c;55寸透明屏的透明度非常高&#xff0c;可以达到80%以上&#xff0c;这意味着即使屏幕开启&#xff0c;…

裁员 10%,暴跌 14%,这家 IT 独角兽正在被抛弃!

流量一跌再跌&#xff0c;Stack Overflow 简直被狠狠地上了一课&#xff01; 3 月份 Stack Overflow 的流量下降了近 14%。该公司的 CEO 压力空前&#xff0c;甚至昨天决定裁员 10%&#xff01; 平均每月下降6%&#xff0c;上月直接跌了近14% 开发人员越来越多地从 AI 聊天机器…

Hive数据仓库

数据仓库概念与起源发展由来 数仓概念 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;&#xff0c;是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面相分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持…