leetcode669. 修剪二叉搜索树(java)

news2024/11/26 8:55:04

修剪二叉搜索树

  • 题目描述
    • 递归
    • 代码演示:

题目描述

难度 - 中等
LC - 669. 修剪二叉搜索树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。
所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

示例1:
在这里插入图片描述
提示:
树中节点数在范围 [1, 10^4] 内
0 <= Node.val <= 10^4
树中每个节点的值都是 唯一 的
题目数据保证输入是一棵有效的二叉搜索树
0 <= low <= high <= 10^4

在这里插入图片描述

递归

由于被修剪的是二叉搜索树,因此修剪过程必然能够顺利进行。
容易想到使用原函数作为递归函数:

  1. 若 root.val 小于边界值 low,则 root 的左子树必然均小于边界值,我们递归处理 root.right 即可;
  2. 若 root.val 大于边界值 high,则 root 的右子树必然均大于边界值,我们递归处理 root.left 即可;
  3. 若 root.val 符合要求,则 root 可被保留,递归处理其左右节点并重新赋值即可。

代码演示:

/**
 * 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 {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null){
            return null;
        }
        if(root.val < low){
            return trimBST(root.right,low,high);
        }
        if(root.val > high){
            return trimBST(root.left,low,high);
        }
        root.right = trimBST(root.right,low,high);
        root.left = trimBST(root.left,low,high);
        return root;
    }
}

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

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

相关文章

Qt应用开发(基础篇)——普通按钮类 QPushButton QCommandLinkButton

一、前言 QPushButton类继承于QAbstractButton&#xff0c;是一个命令按钮的小部件。 按钮基类 QAbstractButton 按钮或者命令按钮是所有图形界面框架最常见的部件&#xff0c;当按下按钮的时候触发命令、执行某些操作或者回答一个问题&#xff0c;典型的按钮有OK&#xff0c;A…

对接西部数据Western Digital EDI 系统

近期我们为国内某知名电子产品企业提供EDI解决方案&#xff0c;采用知行之桥 EDI 系统作为核心组件&#xff0c;成功与西部数据Western Digital&#xff08;简称西数&#xff09;建立EDI连接&#xff0c;实现数据安全且自动化传输。 EDI实施需求 EDI连接 传输协议&#xff1a;A…

利用谷歌浏览器进行前端代码调试(JS,JSP)一

首先在浏览器打开需要调试的界面&#xff0c;按F12&#xff0c;打开调试窗口。 窗口常用的是界面上的四个&#xff1a;Elements&#xff0c;Console&#xff0c;Sources&#xff0c;Network&#xff0c;下面来介绍各个块的调试功能 1、Elements 这个通常用来调试界面的显示&a…

嵌入式学习笔记(15)再接S5PV210的启动过程

三星推荐方式&#xff1a; bootloader必须大于16KB小于96KB。假定bootloader为74KB&#xff0c;启动过程&#xff1a;开机&#xff0c;BL0运行&#xff0c;BLO加载外部启动设备中的bootloader前16KB&#xff08;BL1&#xff09;到SRAM中运行&#xff0c;BL1运行时会加载BL2(bo…

化繁为简 面板式空调网关亮相上海智能家居展 智哪儿专访青岛中弘赵哲海

面对中央空调协议不开放和智能家居协议不统一的问题&#xff0c;青岛中弘选择中央空调控制器这一细分赛道入局智能家居市场&#xff0c;始终贯彻“所有空调&#xff0c;一个网关”的产品技术理念&#xff0c;逐渐探索出一条中弘的发展路径和商业模式。 在2023年的SSHT上海国际智…

ModaHub魔搭社区开源AI Agent开发框架和评测

AI 模型社区魔搭(ModaHub)又上新了,推出适配开源大语言模型的 AI Agent 开发框架 ModaHub-Agent。借助 ModaHub-Agent,所有开发者都可基于开源 LLM 搭建属于自己的智能体应用,最大限度释放想象力和创造力。ModaHub-Agent 的代码现已开源。 AI Agent(AI 智能体、AI 代理)…

怎么把图片压缩小一点?

怎么把图片压缩小一点&#xff1f;如今是互联网的时代&#xff0c;图片已成为在我们的生活或者职场工作中占有非常重要的作用。我们经常需要在网络上上传图片&#xff0c;将它们发布在朋友圈、自媒体平台、电子商务平台、社交媒体或个人网站上展示。然而&#xff0c;如果图片体…

LeetCode(力扣)216. 组合总和 IIIPython

LeetCode216. 组合总和 III 题目链接代码 题目链接 https://leetcode.cn/problems/combination-sum-iii/ 代码 class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result[]self.backtracking(n, k, 0, 1, [], result)return resultdef back…

IPO后首份半年报出炉,豪恩汽电净利润同比下滑10.49%

上市公司的半年报陆续出炉。 今年7月4日&#xff0c;主营汽车电子的豪恩汽电正式登陆创业板上市&#xff0c;公司的主要产品为汽车智能驾驶感知系统&#xff0c;包括车载摄像系统、车载视频行驶记录系统和超声波雷达系统等产品。 相比于目前国内主流的智能驾驶方案公司&#…

工具及方法 - 下载谷歌商店APP的APK文件

在手机上安装APP时&#xff0c;一般都是都在应用商店上下载。 Android手机方便些&#xff0c;很多可以下载到APK&#xff0c;再上传到手机上安装&#xff0c;更加方便了用户的使用。 通过使用APK&#xff0c;可以离线安装应用&#xff0c;安装不同的APP版本&#xff0c;或者安装…

LSTM基础

LSTM 视频讲得非常好 https://www.bilibili.com/video/BV1644y1W7sD/?spm_id_from333.788&vd_source3b42b36e44d271f58e90f86679d77db7门的概念 过去&#xff0c;不过去&#xff0c;过去一部分 点乘&#xff0c;0 concatenation&#xff0c;pointwise LSTM RNN 上一…

uniapp h5 微信打开双标题处理

解决办法 在page.json文件下将 globalStyle 下的 navigationStyle 设置为 “custom” 即可解决微信H5双标题的问题 "globalStyle": {"navigationStyle":"custom",设置成 custom 即可解决微信H5双标题的问题"navigationBarTextStyle": …

rtthread 芯片创建的工程 串口无输出

根据启动流程可以看到 从汇编中跳转到 entry,而 rtt studio 通过芯片生成的工程使用的是默认的HAL库&#xff0c;启动代码是跳转到main&#xff0c;没有替换跳转到entry&#xff0c;所以通过修改路径&#xff1a;libraries\CMSIS\Device\ST\STM32F7xx\Source\Templates\gcc\sta…

【uniapp/uview】u-datetime-picker 选择器的过滤器用法

引入&#xff1a;要求日期选择的下拉框在分钟显示时&#xff0c;只显示 0 和 30 分钟&#xff1b; <u-datetime-picker :show"dateShow" :filter"timeFilter" confirm"selDateConfirm" cancel"dateCancel" v-model"value1&qu…

企业无线局域网部署最佳实践

文章目录 企业无线局域网部署最佳实践引言1. 无线网规划和设计a. 选择合适的频宽b. 网络规划工具c. 考虑物理环境d. 用户密度和需求e. 未来扩展f. 安全性和策略g. 测试和验证2. 无线局域网容量2.1 用户和设备预测2.2 应用流量分析2.3 带宽管理2.4 无线技术选择2.5 网络健康检查…

如何使用nvm管理Node版本

1&#xff0c;去github官网&#xff0c;输入nvm-windows&#xff0c;点击第一个nvm项目&#xff0c;在右侧点击releases,选择箭头指向的安装包 2&#xff0c;为nvm的安装包创建一个英文文件夹&#xff0c;在这个文件夹中安装nvm,注意不要和node.js的安装目录一致 3,点击下载的n…

uniapp 路由不要显示#

在Uniapp中&#xff0c;路由默认使用的是hash模式&#xff0c;即在URL中添加#符号。如果你不想在URL中显示#&#xff0c;可以切换为使用history模式。 要在Uniapp中使用history模式&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开manifest.json文件。在"app&qu…

金山办公推出WPS AI,开放应用于智能文档

&#x1f989; AI新闻 &#x1f680; 金山办公推出WPS AI&#xff0c;开放应用于智能文档 摘要&#xff1a;金山办公宣布WPS AI正式面向社会开放&#xff0c;首先用于WPS智能文档&#xff0c;该产品支持内容生成、表达优化、文档理解及处理等功能。用户可通过WPS客户端、App、…

MyBatis获取参数值的两种方式(重点)

MyBatis获取参数值的两种方式&#xff1a;${}和#{}${}的本质就是字符串拼接&#xff0c;#{}的本质就是占位符赋值${}使用字符串拼接的方式拼接sql&#xff0c;若为字符串类型或日期类型的字段进行赋值时&#xff0c;需要手动加单引号&#xff1b;但是#{}使用占位符赋值的方式拼…

STM32屏幕计时器

目录 一、最终效果二、实现思想三、实现过程3.1 屏幕显示3.2 中断处理 一、最终效果 显示屏显示计时时间&#xff0c;格式为 00:00:00&#xff0c;依次为 时:分:秒&#xff0c;程序运行之后自动计时&#xff0c;当按下按键&#xff0c;计时清零&#xff0c;按下按键采用外部中…