【LeetCode】Hot100:验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树
只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

英文题目
Given the root of a binary tree, determine if it is a valid binary search tree (BST).
A valid BST is defined as follows:
The left subtreeof a node contains only nodes with keys less than the node’s key.
The right subtree of a node contains only nodes with keys greater than the node’s key.
Both the left and right subtrees must also be binary search trees.

解题思路

画了一个四层的二叉树,发现递归方法是,左子树的最右节点应该比根节点小,右子树的最左节点应该比根节点大,基于此写的代码(事实上只要想着所有点,然后更新边界,就可以不用重复遍历来递归了)

AC代码

# 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:def judge(root):if root.left is None and root.right is None:return Trueif root is None:return Trueleft, right, leftflag, rightflag = root.left, root.right, True, Trueif left is not None:while left.right is not None:left = left.rightleftflag = root.val > left.val and judge(root.left)if right is not None:while right.left is not None:right = right.leftrightflag = root.val < right.val and judge(root.right)return  leftflag and rightflagreturn judge(root)

官方题解

想到使用边界后面思路就一下子通了

class Solution:def isValidBST(self, root: TreeNode) -> bool:stack, inorder = [], float('-inf')while stack or root:while root:stack.append(root)root = root.leftroot = stack.pop()# 如果中序遍历得到的节点的值小于等于前一个 inorder,说明不是二叉搜索树if root.val <= inorder:return Falseinorder = root.valroot = root.rightreturn True

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

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

相关文章

【代码随想录算法训练营第四十八天|188.买卖股票的最佳时机IV、309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费】

文章目录 188.买卖股票的最佳时机IV[309. 买卖股票的最佳时机含冷冻期](https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/description/) 188.买卖股票的最佳时机IV 和前几个一样&#xff0c;dp数组变大到[n][2k1]&#xff0c;推导公式也一样。 …

考大学能改变命运吗?不能

今天高考出分&#xff0c;今天早上就有朋友问我这个分怎么选学校怎么选专业。 &#xff08;1&#xff09; 我先跟他说的是选专业。 我说未来十年&#xff0c;中国会呈现M型社会&#xff1a; 要么你牛&#xff0c;做卡脖子突破&#xff0c;会就是会、不会就是不会 要么你不牛&…

AI技术在呼吸健康诊断领域的前沿进展

近期&#xff0c;谷歌科研团队在《自然》杂志上发布了一项引人注目的研究成果&#xff0c;该研究聚焦于利用人工智能&#xff08;AI&#xff09;技术对人类咳嗽及呼吸音进行分析&#xff0c;以实现对个体健康状况的精准评估。这一创新系统的研发基于大规模音频数据的深度学习&a…

C++STL 6大组件—你必知必会的编程利器

课程总目录 文章目录 一、vector容器二、deque和list容器三、vector、deque、list横向对比四、详解容器是配置stack、queue、priority_queue五、无序关联容器六、有序关联容器七、迭代器八、函数对象九、泛型算法和绑定器 一、vector容器 底层数据结构是动态开辟的数组&#x…

Ai指令优化文章成爆款实战记录6.26

大家好&#xff0c;我是网创有方的站长&#xff0c;继上篇文章出来之后&#xff0c;立马测试了一翻&#xff0c;没想到第一篇就出来了小爆款。展现量当天3万多&#xff0c;阅读量也有7000多的一个数据。虽说不是很高&#xff0c;相比平常几十的阅读量来说&#xff0c;进步还是非…

什么是代理IP服务?

代理IP服务是一种通过中间代理服务器来隐藏用户真实IP地址的服务。当您使用代理IP服务时&#xff0c;您的网络请求首先会发送到代理服务器&#xff0c;然后再由代理服务器发送到目标网站。代理IP就像是一台专门用来帮你“撒谎”的服务器&#xff0c;你通过这台服务器访问互联网…

process.cwd()与__dirname的区别

process.cwd() 是当前执行node命令时候的文件夹地址 ——工作目录&#xff0c;保证了文件在不同的目录下执行时&#xff0c;路径始终不变__dirname 是被执行的js 文件的地址 ——文件所在目录 在electron进程中使用 如果使用__dirname则会读取到当前运行目录(dist_electron)下…

【大模型】大模型微调方法总结(二)

1.Adapter Tuning 1.背景 2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的 PEFT微调方式&#xff0c;拉开了 PEFT 研究的序幕。他们指出&#xff0c;在面对特定的下游任务时&#xff0c;如果进行 Full-Fintuning&#xff0…

自顶向下开发优点-系统架构师(十八)

1、以太网中&#xff0c;数据的传输使用&#xff08;&#xff09;。 A直接的二进制 B循环码 C曼彻斯特编码 D差分曼彻斯特编码 解析&#xff1a; 以太网中&#xff0c;曼彻斯特编码 2、&#xff08;重点&#xff09;以下关于自顶向下开发的叙述中&#xff0c;正确的是&…

【yolov8:metrics = model.val()报错TypeError: int() 】

今天在运行yolov8的val模型测验时报错&#xff1a; TypeError: int() argument must be a string, a bytes-like object or a number, not ‘KeyboardModifier’ 看了很多博主和文章&#xff0c;最后找到了解决方法&#xff1a; 在代码头部使用以下代码&#xff0c;重新运行…

python turtle 004Hello Kity

代码&#xff1a;pythonturtle004HelloKity资源-CSDN文库 # 作者V w1933423 import math import turtle as t# 设置画笔速度 t.speed(0)# 定义函数画弧 def myarc(t1, r, angle):arc_length 2 * math.pi * r * angle / 360 # 弧长n int(arc_length / 3) 1 # 分割段数step…

【大模型】大模型微调方法总结(三)

1. Prefix-tuning 1.背景 2021年论文《Prefix-Tuning: Optimizing Continuous Prompts for Generation》中提出了 Prefix Tuning 方法。与Full-finetuning 更新所有参数的方式不同&#xff0c;该方法是在输入 token 之前构造一段任务相关的 virtual tokens 作为 Prefix&#x…

二叉树——对称二叉树

目录 1&#xff1a;题目分析及思路 2&#xff1a;代码实现和分析 1&#xff1a;代码 2&#xff1a;分析 1&#xff1a;题目分析及思路 这里我们有一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 思路&#xff1a; 如上图&#xff0c;示例1是一颗对称的二叉树&a…

在线教育平台开发经常会遇到哪些问题

在线教育平台开发经常会遇到哪些问题&#xff1f;随着科技的不断进步和互联网的普及&#xff0c;在线教育已经成为教育领域的一大趋势。然而&#xff0c;开发在线教育平台并非一帆风顺&#xff0c;其中涉及的技术挑战、安全威胁以及用户体验等问题&#xff0c;都需要我们仔细思…

基于JSP的列车票务信息管理系统

开头语&#xff1a; 你好&#xff0c;我是专注于计算机科学与技术研究的学长。如果你对列车票务信息管理系统感兴趣或有相关需求&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDE、数据库管理工具…

反射及动态代理

反射 定义&#xff1a; 反射允许对封装类的字段&#xff0c;方法和构造 函数的信息进行编程访问 图来自黑马程序员 获取class对象的三种方式&#xff1a; 1&#xff09;Class.forName("全类名") 2&#xff09;类名.class 3) 对象.getClass() 图来自黑马程序员 pac…

pytest-yaml-sanmu(五):跳过执行和预期失败

除了手动注册标记之外&#xff0c;pytest 还内置了一些标记可直接使用&#xff0c;每种内置标记都会用例带来不同的特殊效果&#xff0c;本文先介绍 3 种。 1. skip skip 标记通常用于忽略暂时无法执行&#xff0c;或不需要执行的用例。 pytest 在执行用例时&#xff0c;如果…

Nuxt框架 和 Vite框架比较

共同点 基于 Vue.js&#xff1a;Nuxt 和 Vite 都是围绕 Vue.js 构建的&#xff0c;这意味着它们可以利用 Vue.js 的响应式数据绑定和组件系统。 现代前端开发&#xff1a;两者都支持现代前端开发实践&#xff0c;如组件化、模块化和单文件组件&#xff08;SFCs&#xff09;。 V…

提升你的创造力的几个重要技巧

保持输入输出&#xff0c;光出水而不补充的水缸就会空&#xff0c;人要时刻保持学习的习惯&#xff1b; 深刻意识到信息即反应&#xff0c;主动屏蔽噪声和垃圾人的打扰的能力决定你是否拥有时间&#xff1b; 事有轻重缓急的分类&#xff0c;优先选择那些具有挑战性的任务&#…

LATR 算法解读

文章目录 1. 论文2. 环境安装3. 代码解读3. 1 初始化 lane query3.1.1 SparseInsDecoder3.1.2 loss 计算3.1.3 初始化instance query3.2 ref points 的生成3.3 lane query 和feats进行attention3.3.1 self attn3.3.1 cross attn4. 参考1. 论文 2. 环境安装 146 [2024-06-20 10…