两种做法——判断是否是二叉搜索树

https://leetcode.cn/problems/validate-binary-search-tree/description/?envType=study-plan-v2&envId=top-interview-150
在这里插入图片描述

方法一:中序遍历

考虑只有两个节点和一个结点的情况,可以头尾各加一个最大最小值,不用特判了,也可以直接特判1和0

由于测试样例里有最大值,所以INT最大值不够用

class Solution {
    List<Long> list = new ArrayList<>();
    public void dfs(TreeNode root){
        if(root==null) return;
        dfs(root.left);
        list.add((long)root.val);
        dfs(root.right);
    }
    public boolean isValidBST(TreeNode root) {
        list.add(Long.MIN_VALUE);
        dfs(root);
        list.add(Long.MAX_VALUE);
        for(int i = 1 ;i < list.size()-1; i++)
            if(list.get(i-1)>=list.get(i)||list.get(i)>=list.get(i+1))
                return false;
        return true;
    }
}
class Solution {
    List<Integer> list = new ArrayList<>();
    public void dfs(TreeNode root){
        if(root==null) return;
        dfs(root.left);
        list.add(root.val);
        dfs(root.right);
    }
    public boolean isValidBST(TreeNode root) {
        dfs(root);
        if(list.size()==1) return true;
        if(list.size()==2){
            if(list.get(1)>list.get(0)) return true;
            else return false;
        }
        for(int i = 1 ;i < list.size()-1; i++)
            if(list.get(i-1)>=list.get(i)||list.get(i)>=list.get(i+1))
                return false;
        return true;
    }
}

递归法:

非常精妙的区间法,利用区间进行递归。

在这里插入图片描述

class Solution {
    public boolean dfs(TreeNode root,long left,long right){
        if(root==null) return true;
        if(root.val>=right||root.val<=left)return false;
        return dfs(root.left,left,root.val)&&dfs(root.right,root.val,right);
    }
    public boolean isValidBST(TreeNode root) {
        return dfs(root, Long.MIN_VALUE,Long.MAX_VALUE);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

流量分析1--菜刀666

1&#xff1a;菜刀666&#xff1a; 题目描述 分析流量包&#xff0c;过滤http数据流 追踪TCP数据流 对比第5个流和第7个流发现&#xff0c;同样的目录下 多出了6666.jpg。猜测是由攻击者上传&#xff0c;直接在请求包里搜索FFD8--FFD9 保存为1.jpg 利用foremost工具对1.jpg进…

Vis.js教程(四):给关系图的节点设置Image背景

1、引言 在Vis.js教程三中我们介绍了如何给关系图设置关系指向以及关系标签。 本节我们计划给关系图节点设置背景&#xff0c;拿菲尼克斯太阳队关系图的例子来说&#xff0c;如果给每一个球员节点都加上图片&#xff0c;这样看起来远远比名称更直观。 2、添加节点背景图片 …

phpStudy本地快速搭建网站,实现无公网IP固定地址远程访问

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

【无线网络技术】——无线局域网(学习笔记)

&#x1f4d6; 前言&#xff1a;本章首先介绍无线局域网的基本概念&#xff0c;然后详细介绍IEEE 802.11的基本工作原理&#xff0c;侧重于媒体访问控制和一跳范围内的通信技术。 目录 &#x1f552; 1. 概述&#x1f558; 1.1 覆盖范围&#x1f558; 1.2 特点&#x1f558; 1.…

设计新手利器!10款Windows免费设计软件推荐

1.即时设计 即时设计是国内首款协作式 UI 设计工具&#xff0c;更是同类产品中首先实现百万用户的设计软件。作为国产软件&#xff0c;即时设计的全中文操作系统和多设备平台的使用支持让它更加符合国内设计师的使用习惯。同时&#xff0c;即时设计也为用户提供了强大的功能支…

HarmonyOS开发(十):通知和提醒

1、通知概述 1.1、简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知使用的的常见场景&#xff1a; 显示接收到的短消息、即使消息...显示应用推送消息显示当前正在进行的事件&#xff0c…

Apache+mod_jk模块代理Tomcat容器

一、背景介绍 最近在看Tomcat运行架构原理, 正好遇到了AJP协议(Apache JServ Protocol). 顺道来研究下这个AJP协议和具体使用方法. 百度百科是这么描述AJP协议的: AJP&#xff08;Apache JServ Protocol&#xff09;是定向包协议。因为性能原因&#xff0c;使用二进制格式来传输…

剧本杀小程序搭建:打造线上剧本杀新体验

剧本杀是一款以角色扮演为主的游戏&#xff0c;一度成为了年轻人的最喜爱的社交游戏。在剧本杀市场需求下&#xff0c;剧本杀规模也迅速上升。今年第一季度&#xff0c;剧本杀市场规模环比增长47%&#xff0c;市场整体消费水平逐渐呈上升趋势。 随着剧本杀的不断发展&#xff…

通用plantuml 时序图(Sequence Diagram)模板头

通用plantuml文件 startuml participant Admin order 0 #87CEFA // 参与者、顺序、颜色 participant Student order 1 #87CEFA participant Teacher order 2 #87CEFA participant TestPlayer order 3 #87CEFA participant Class order 4 #87CEFA participant Subject order …

Google官方推广工具及其用法

Google的官方推广工具是一系列强大的在线广告工具&#xff0c;也就是说在帮助企业主通过Google搜索引擎和其他合作伙伴网站上展示他们的广告&#xff0c;吸引更多的潜在客户。本文小编讲一些常用的Google官方推广工具及其用法。 1、Google Ads Google Ads是最受欢迎和广泛使用的…

一次显著的性能提升,从8s到0.7s

前言 最近我在公司优化了一些慢查询SQL&#xff0c;积累了一些SOL调优的实战经验。 这篇文章从实战的角度出发&#xff0c;给大家分享一下如何做SQL调优。 经过两次优化之后&#xff0c;慢SQL的性能显著提升了&#xff0c;耗时从8s优化到了0.7s。 现在拿出来给大家分享一下…

数据结构与算法编程题50

假设不带权有向图采用邻接矩阵G存储&#xff0c;设计实现以下功能的算法。 &#xff08;1&#xff09;求出图中每个顶点的出度。 &#xff08;2&#xff09;求出图中出度为0的顶点数。 &#xff08;3&#xff09;求出图中每个顶点的入度。 //参考博客&#xff1a;https://blog.…

Java程序员,你掌握了多线程吗?

文章目录 01 多线程对于Java的意义02 为什么Java工程师必须掌握多线程03 Java多线程使用方式04 如何学好Java多线程写作末尾 摘要&#xff1a;互联网的每一个角落&#xff0c;无论是大型电商平台的秒杀活动&#xff0c;社交平台的实时消息推送&#xff0c;还是在线视频平台的流…

想转行IT,有前途嘛?30个详细理由中会得到你想要的答案

目录 前言&#xff1a; 一、转行IT的前景 二、IT行业的情况 三、技能需求 四、如何准备转行IT 如果你想转行IT&#xff0c;以下是一些建议&#xff1a; 前言&#xff1a; 转行IT是一个颇具吸引力的选择&#xff0c;尤其在当前社会&#xff0c;IT行业的需求非常广泛。然而…

自动化测试中几种常见验证码的处理方式及如何实现?

UI自动化测试时&#xff0c;需要对验证码进行识别处理&#xff0c;有很多方式&#xff0c;每种方式都有自己的特点&#xff0c;以下是一些常用处理方法&#xff0c;仅供参考。 1 去掉验证码 从自动化的本质上来讲&#xff0c;主要是提升测试效率等&#xff0c;但是为了去研究验…

Pytorch线性回归教程

import torch import numpy as np import torch.nn as nn import matplotlib.pyplot as plt生成测试数据 # 长期趋势 def trend(time, slope0):return slope * time# 季节趋势 def seasonal_pattern(season_time):return np.where(season_time < 0.4,np.cos(season_time * …

视频监控管理平台/智能监测/检测系统EasyCVR智能地铁监控方案,助力地铁高效运营

近日&#xff0c;关于全国44座城市开通地铁&#xff0c;却只有5座城市赚钱的新闻冲上热搜。地铁作为城市交通的重要枢纽&#xff0c;是人们出行必不可少的一种方式&#xff0c;但随着此篇新闻的爆出&#xff0c;大家也逐渐了解到城市运营的不易&#xff0c;那么&#xff0c;如何…

高速风筒解决方案,基于高性价比的普冉单片机开发

高速风筒也就是高速吹风机&#xff0c;与传统的吹风机相比&#xff0c;高速吹风机具有更强大的风力和更快的干燥速度&#xff0c;可以更快地干燥头发或其他物体表面的水分。它通常由一个电动机驱动&#xff0c;并通过旋转的叶片来产生气流。高速风筒广泛应用于个人护理、美容、…

Unity链接MySql数据库

一、连接准备 1. MySql.Data插件 Visual Studio中下载打开Visual Studio_项目_管理NuGet程序包在浏览中搜索MySql.Data并下载 2.MySql官网下载插件 前提已经安装mysql&#xff0c;然后到官网下载以下三个东西&#xff08;最好不要使用最新版本&#xff09; MySQL Connector…

如何从Git上拉取项目

1.Git的概念 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速的处理从很小到非常大的项目版本管理。它实现多人协作的机制是利用clone命令将项目从远程库拉取到本地库&#xff0c;做完相应的操作后再利用push命令从本地库将项目提交至远程库。 2.Git的工作流程 …