Leetcode面试经典150题-98.验证搜索二叉树

news2024/11/15 1:40:05

 解法都在代码里,不懂就留言或者私信

二叉树的递归套路,练练就习惯了

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    /**首先你应该直到什么是二叉搜索树,二叉搜索树的特征就是对于某个节点,如果左树存在则左树上最大的节点小于当前节点
    如果右树存在,右树上最小的节点大于当前节点
    那么对于二叉树的递归套路,我们需要向左右子树要三个信息:1.是不是二叉搜索树
    2.最小节点的值
    3.最大节点的值 */
    public boolean isValidBST(TreeNode root) {
        Info info = getInfo(root);
        return info.isBST;
    }

    public Info getInfo(TreeNode root) {
        /**如果是空就返回null */
        if(root == null) {
            return null;
        }
        /**最大值最小值先设置为root的值 */
        int minVal = root.val;
        int maxVal = root.val;
        /**目前没有发现违反二叉搜索树规则的地方,暂时认为它是 */
        boolean isBST = true;
        /**拿到左右子树的信息 */
        Info leftInfo = getInfo(root.left);
        Info rightInfo = getInfo(root.right);
        /**左树不为空根据左树信息加工自己的三个信息 */
        if(leftInfo != null) {
            minVal = Math.min(minVal, leftInfo.minVal);
            maxVal = Math.max(maxVal, leftInfo.maxVal);
            isBST = leftInfo.isBST && isBST && leftInfo.maxVal < root.val;
        }
        /**右树不为空根据右树的信息加工自己的三个信息 */
        if(rightInfo != null) {
            minVal = Math.min(minVal, rightInfo.minVal);
            maxVal = Math.max(maxVal, rightInfo.maxVal);
            isBST = rightInfo.isBST &&  isBST && rightInfo.minVal > root.val;
        }
        /**根据自己的三个信息构造Info并返回 */
        return new Info(minVal, maxVal, isBST);
    }

    static class Info {
        int minVal;
        int maxVal;
        boolean isBST;
        public Info(int minVal, int maxVal, boolean isBST) {
            this.minVal = minVal;
            this.maxVal = maxVal;
            this.isBST = isBST;
        }
    }
}

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

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

相关文章

内联汇编 (28)

1 首先是基本的格式。 网上的截图&#xff1a; 命令换行使用 \n\t 这里的constraint 指的就是 寄存器。 r , m , 比较重要。 这里的输出的意思是 &#xff0c; 从汇编到 C语言。 输入指的是 从C语言到 汇编语言 这是个具体的例子 %1, %2,%3, 是指 从上往下算&#xff0c;…

【Canvas与电脑桌面】白褐橘三色立方桌面(1920*1080)

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>白褐橘三色立方桌面Draft1</title><style type"text/c…

应用层协议-HTTPS协议

应用层协议-HTTPS协议 一.概述 HTTP协议&#xff1a;初衷未考虑到安全性 HTTPS是在HTTP的基础上对应用层数据进行加密操作&#xff0c;HTTPSHTTPSSL/TLS HTTPS &#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure [5]&#xff09;&#xff0c;是以安全为目标…

用于客户支持的 GenAI:探索 Elastic Support Assistant

作者&#xff1a;Chris Blaisure, Cory Mangini 我们很高兴地宣布推出 Elastic 的支持助手。本博客将带你了解我们最新的生成式 AI 工具以及它可以帮助你使用 Elastic 技术的一些常见场景。 Elastic 支持助手现已在 Support Hub 上可用 今天&#xff0c;我们宣布 Elastic 支持…

vue3的el-tree的default-checked-keys无法勾选的问题解决

前言:有些树形控件是需要默认勾选的 但是请求后渲染不显示 刷新外部的key值也没有用 看了一下文档 我们使用自带的方法来解决 <el-treenode-key"id":data"state.parentMenuList":default-checked-keys"state.checkIdList":check-on-click-n…

VBA高级应用30例应用3ListObject对象:循环列出当前工作表中的表

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

266-基于Xilinx Kintex-7 XC7K325T 的12路光纤Switch交换平台

一、板卡概述 该系统是由两块模块组成&#xff0c;分别是基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片&#xff0c;pin_to_pin兼容FPGAXC7K410T-2FFG900 的模块和一个FPGA夹层卡&#xff08;FMC&#xff09;模块。前者支持64bit DDR3容量2GByte&#xff0c;USB3.0接口;HPC的FMC连…

reactwebpack老项目开发环境增加vite

在开发环境下&#xff0c;vite的启动时间远远高于webpack&#xff0c;特别是首次启动&#xff0c;做到了真正的按需加载&#xff0c;开发体验好于webpack&#xff1b; 目的&#xff1a;开发环境加入vite,生产环境不变react项目切webpack&#xff08;开发环境增加vite&#xff0…

一篇文章教你如何设计权限控制系统——RBAC模型详解

原文链接&#xff0c;关注获取更多技术文章&#xff01; 在信息技术飞速发展的今天&#xff0c;数据安全和系统访问控制成为了保护企业资产的关键。基于角色的访问控制&#xff08;RBAC&#xff0c;Role-Based Access Control&#xff09;模型作为一种有效的权限管理策略&…

【C++ Primer Plus习题】14.1

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "wine.h" …

自适应中值滤波器:图像去噪的高效解决方案

在数字图像处理中&#xff0c;椒盐噪声是常见的干扰之一&#xff0c;它会导致图像出现随机的黑点和白点&#xff0c;严重影响图像质量。传统的中值滤波器虽然在一定程度上能够去除这种噪声&#xff0c;但可能无法完全恢复图像的细节。为此&#xff0c;本文将介绍一种自适应中值…

81.C语言中的内存分布

目录 一.内存分布 二.视频教程 一.内存分布 代码段&#xff1a;通常是指用来存放程序执行代码的一块内存区域。通常为只读。 只读数据段&#xff1a;如字符串&#xff0c;数字等。 初始化数据段:已初始化的全局变量&#xff0c;已初始化的静态变量。 未初始化数据段&#x…

心觉:做一件事很纠结,怎么办?

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作164/1000天 专心做一件事情并不容易 因为这个世界物质太丰富了&#xff0c;可以选择的事情太多了 诱惑无处不在&#xff0c;定力…

C语言——在有序数组中插入一个新的元素,且数组的排列不变

在插入新元素时&#xff0c;数组需要多一个空间&#xff0c;所以在 malloc 时分配 len 1 的空间。 #include <stdio.h> #include <stdlib.h> void insert_arry(int *arr, int len,int target) { int index; for (int i 0; i < len; i) { …

论文风向变了!迁移学习+多模态融合才是王道!性能爆炸好

多模态如今是越来越火了&#xff0c;与之相关的研究方向在各大顶会基本都成了投稿热门&#xff0c;趁着这波风向&#xff0c;我也给想发论文但找不着idea的同学推荐一个创新思路&#xff1a;迁移学习多模态融合。 这种结合可以轻松搞定提高性能这一核心问题&#xff0c;通过将…

VulnHub DC-1-DC-7靶机WP

VulnHub DC系列靶机&#xff1a;https://vulnhub.com/series/dc,199/ # VulnHub DC-1 nmap开路获取信息 Nmap scan report for 192.168.106.133 Host is up (0.00017s latency). Not shown: 997 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 1…

python如何加速计算密集型任务?

问题描述&#xff1a; 在python中&#xff0c;有一个函数&#xff0c;其功能是进行某种计算&#xff0c;需要传入一些参数&#xff0c;计算完成后传回结果&#xff0c;调用其一次大概要1s的时间&#xff0c;现在需要通过for循环调用其350次&#xff0c;保存每次调用结果&#…

自动化测试面试题(含答案)

1、你会封装自动化测试框架吗&#xff1f; 自动化框架主要的核心框架就是分层PO模式&#xff1a;分别为&#xff1a;基础封装层BasePage&#xff0c;PO页面对象层&#xff0c;TestCase测试用例层。然后再加上日志处理模块&#xff0c;ini配置文件读取模块&#xff0c;unittest…

SprinBoot+Vue校园部门资料管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

高反差保留DetailTransfer测评

inpainting中的生成链路优化. ComfyUI中IC-Light节点的Detail Transfer节点参数测试_iclight detailtransfer-CSDN博客文章浏览阅读1k次,点赞16次,收藏23次。ic-light是一个能重绘画面光影的节点,但是在重绘的过程中,难免会将图像本身的细节进行重绘,尤其是在电商的场景中…