java数据结构与算法刷题-----LeetCode669. 修剪二叉搜索树

36 Agent Memory:如何让智能体记住该记的东西 Agent 会调用工具,只能说明它有了行动能力。要让它跨会话、跨任务持续工作,还需要一套可治理的 Memory 系统。本文讲清上下文窗口、RAG 和 Agent Memory 的区别,以及工作记忆、情景记忆、语义记忆、程序记忆该如何分层设计。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

文章目录

在这里插入图片描述

解题思路
  1. 二叉搜索树,当前结点左边都比它小,右边都比它大
  2. 所以我们前序遍历
  1. 如果当前结点node,比low小,说明它和左子树都小于low,抛弃,那么剩下右子树保留,使用同样的套路判断,因为右子树都比node大,无法确定是否抛弃
  2. 如果node比high大,抛弃右子树,左子树保留进行判断。

1. 递归

代码:时间复杂度O(n),空间复杂度O(n)

在这里插入图片描述

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null) return null;
        int val = root.val;
        //如果当前结点<low,说明它和它的左子树都小于low,都需要去掉
        //但是右子树都比当前结点大,不能直接去掉,需要继续递归单独也判断一下
        if(val < low) return trimBST(root.right,low,high);//如果val<low,抛弃左子树,递归右子树,并返回右子树递归结果
        else if(root.val > high) return trimBST(root.left,low,high);//如果val>high,抛弃右子树,递归左子树
        else {//如果当前结点在low和high之间,说明其需要保留,则继续递归判读子孙是否需要去除
            root.left = trimBST(root.left,low,high);
            root.right = trimBST(root.right,low,high);
            return 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;
 *     }
 * }
 */

2. 迭代

代码:时间复杂度O(n),空间复杂度O(1)

在这里插入图片描述

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        //找到第一个不需要抛弃的结点,作为根结点。
        while (root != null && (root.val < low || root.val > high)) {//如果root不为null,并且root是要抛弃的结点就向下遍历
            if (root.val < low) {
                root = root.right;
            } else {
                root = root.left;
            }
        }
        if (root == null) {//如果这个根结点为null,说明所以结点都需要抛弃,返回null即可
            return null;
        }
        //将比low小的抛弃
        for (TreeNode node = root; node.left != null; ) {//从root开始遍历
            if (node.left.val < low) {//如果左子树left比low小,
                node.left = node.left.right;//抛弃left和其左子树,保留右子树
            } else {//如果左子树left比low大,那么right肯定更大,所以只需要继续向左找,因为左边是更小的值,才有可能小于low
                node = node.left;
            }
        }
        //将比high大的抛弃
        for (TreeNode node = root; node.right != null; ) {
            if (node.right.val > high) {//比high大
                node.right = node.right.left;//抛弃其本身和其右子树,保留左子树
            } else {
                node = node.right;
            }
        }
        return root;
    }
}
遗传算法(Genetic Algorithm)详解与实现 遗传算法(Genetic Algorithm, GA)是受自然进化原理启发的一系列搜索算法。通过模仿自然选择和繁殖的过程,遗传算法可以为涉及搜索、优化和学习的各种问题提供高质量的解决方案。同时,它们类似于自然进化,因此遗传算法可以克服传统搜索和优化算法遇到的一些障碍,尤其是对于具有大量参数和复杂数学表示形式的问题。 阅读详情

相关推荐

PCB设计实践(三十二)PCB设计遇到大电流时的设计技巧

本文系统阐述10A至数百安培PCB设计的六大关键技术。载流能力优化强调铜厚选择(2-4oz)、线宽计算及并联结构;热管理提出散热孔阵列、铜基板嵌入等方案;布局策略包括功率分区和低阻抗路径设计;材料工艺推荐铝基板、陶瓷基板等高效解决方案;安全设计涵盖电气隔离与保护电路;验证环节需结合热仿真与实测。典型150A电机驱动板案例显示,通过4oz铝基板、散热孔阵列等设计,可实现温升≤45℃的稳定运行。核心在于铜厚线宽协同、主动散热及严格验证。

致力于硬件设计、人工智能知识及技术的分享,不断鞭策自己成长,共同进步! 4232

669. 修剪二叉搜索树

这篇文章介绍了如何修剪二叉搜索树,使所有节点值都在给定区间[low,high]内。关键点在于:1)利用BST特性,当节点值小于low时只需处理右子树,大于high时只需处理左子树;2)通过递归返回修剪后的子树,并更新父节点的左右指针来实现节点移除。该方法保持原有相对结构,时间复杂度为O(n)。文章通过具体示例和代码详细解释了递归处理逻辑,强调了如何通过返回值来更新父子关系。

m0_68880377的博客 602

别再手动算临界转速了!用ANSYS Workbench 2023 R2快速搞定转子坎贝尔图(附完整APDL命令流)

本文详细介绍了如何利用ANSYS Workbench 2023 R2快速生成转子坎贝尔图,实现全自动临界转速分析。通过对比传统手动计算与Workbench自动化流程的效率差异,展示了其在旋转机械设计中的革命性优势,包括大幅缩短分析周期、提升精度至98.7%。文章还提供了完整的APDL命令流和实战案例,帮助工程师快速掌握这一高效工具。

weixin_42699679的博客 473

Java实现 LeetCode 669 修剪二叉搜索树(遍历树)

669. 修剪二叉搜索树 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。 示例 1: 输入: 1 / \ 0 2 L = 1 R = 2 输出: 1 \ 2 示例 2...

南 墙 1万+

【从零开始玩量化7】easyTrader: 自动化(程序化)交易利器

前面的文章,我们介绍了数据获取工具AKShare, 量化回测工具backtrader等,这一篇,介绍程序化交易工具easyTrader。作者网名食灯鬼,目前项目在Github上的star数已经有6.7k。这可能是目前,开源能找到的,最好用的程序化交易库了。本文介绍了easyTrader的简单用法,这个包还有很多功能,后续再继续写文章探究。

量化投资助手的博客 1万+

华为ENSP虚拟网络与本地物理网卡高效桥接实战指南

本文提供了一份详细的华为ENSP虚拟网络与本地物理网卡桥接实战指南。通过清晰的四步操作,帮助用户打破虚拟实验环境的“孤岛”限制,实现ENSP设备与真实局域网及互联网的互通,从而进行更真实的协议测试、软件升级和混合网络环境搭建。

qsc90123456的博客 538

【LeetCode刷题日记】669.修剪二叉搜索树

这篇文章讲解了如何修剪二叉搜索树(BST),使其所有节点的值都在给定区间[low, high]内。关键点包括:1)利用BST的性质(左子树值小,右子树值大)来决定是否需要修剪子树;2)递归处理四种情况(节点值小于low、大于high、在区间内或为空);3)通过示例和图解演示修剪过程;4)提供了递归和迭代两种实现方法。最终返回修剪后的BST,保持原有结构不变。时间复杂度为O(n),空间复杂度递归为O(h),迭代为O(1)。

任岁月风干理想再也找不回真的我 2287

傅里叶红外(FT-IR):Origin数据处理、光谱绘图、曲线优化、图形美化

双击 X 轴,选择“轴线和刻度线”,设置粗细为“2”(较常用的粗细度),主刻度和次刻度为“朝内”,然后在此对话框内选择左轴,设置粗细为“2”,主刻度和次刻度为“无”,上轴和右轴同左轴。(4)在第二个图层基础上新建第三个图层,针对第二组数据重复上述中(1)和(2)的操作,再添加第三组数据的折线图,并重复上述中(3)的操作。FTIR 光谱上的峰只有相对的强弱,因此只分析一个光谱上的一个峰的强度大小并无意义,一般分析两个光谱在同一位置的峰强相对大小,或者分析同一光谱不同位置的峰强相对大小并与另一光谱进行比较。

qiushireader的博客 3934

代码随想录算法训练营Day26 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

训练营第26天:669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

jiabao0520的博客 1241

Speedtree学习笔记(案例)——拥有多种材质的植物如何导入使用(以草为例)

注:Speedtree无论保存还是导入模型其存储路径不可有中文。 第一步拆分草的模型 根据所需的材质去拆分(例:假若草的果实,茎秆和叶子是不同的材质那么就需拆分为三份;假若画的全部颜色及材质一样就没有必要去拆分模型) 第二步导入草的模型 在Mesh面板中依次导入草的模型——Do nothing additional right now 第三步扩大草的生长区域范围(可省略)...

L人青的博客 5722

基于STM32的家用新风系统智能控制器 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了家用新风系统智能控制器的全功能开发,覆盖多传感器数据采集、双模式控制、PID调速、异常报警、掉电记忆等核心功能,全程采用保姆式无跳步教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 468

「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解

如果不对递归有深刻的理解,本题有点难, 单纯移除一个节点那还不够,要修剪!

代码随想录 629

华为非AI方向0603笔试真题-爆破小游戏(详细思路+多语言题解)

华为非AI方向0603笔试第二题【爆破小游戏】,提供详细思路讲解以及代码实现。

qq_45776114的博客 358

力扣669 修剪二叉搜索树 java实现

题目要求修剪二叉搜索树,保留节点值在[low, high]范围内的节点,并保持原有结构。采用递归方法:若节点值小于low,则修剪右子树;若大于high,则修剪左子树;若在范围内,则递归修剪左右子树。时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高。

m0_58648798的博客 943

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Leetcode刷题java之669. 修剪二叉搜索树

执行结果: 通过 显示详情 执行用时 :1 ms, 在所有 Java 提交中击败了97.16% 的用户 内存消耗 :41 MB, 在所有 Java 提交中击败了62.50%的用户 题目: 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根...

逆水行舟,不进则退 587

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

刷题计划 day21 二叉树(十)【删除二叉搜索树中的节点】【修剪二叉搜索树】【将有序数组转换为二叉搜索树】【把二叉搜索树转换为累加树】

刷题计划day21二叉树(十)继续,二叉树专题终于结束了哈哈,下一期是回溯专题,敬请期待关注【删除二叉搜索树中的节点】【修剪二叉搜索树】【将有序数组转换为二叉搜索树】【把二叉搜索树转换为累加树】

weixin_72499901的博客 1002

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

代码随想录算法训练营第二十三天| LeetCode 669.修剪二叉搜索树 、LeetCode108.将有序数组转换为二叉搜索树、LeetCode538. 把二叉搜索树转换为累加树

说明当前节点需要删除,但是由于其孩子可能符合条件,因此应该继续向右遍历,用right接收返回值。说明当前节点需要删除,但是由于其孩子可能符合条件,因此应该继续向左遍历,用left接收返回值。调用递归函数,用root接收返回值,传入数组,0,数组的长度-1三个值,返回递归函数返回的值。递归调用递归函数,传入数组,左区间边界下标,和中间位置下标-1,用当前节点的左孩子接收。递归调用递归函数,传入数组,中间位置下标+1,右区间边界下标,用当前节点的右孩子接收。向右递归遍历,传入当前节点的右孩子。

m0_64514622的博客 1243

力扣669. 修剪二叉搜索树(Java实现)

f(5) 递归调用 f(7) ,7 > 6,所以节点7及其右树都不返回。f(7) 调用 f(6) ,6 ∈ [4,6]。所以f(6) 返回 f(7) 节点6,f(7) 返回 f(5) 节点6。f(5) 递归调用 f (3),3 < 4,所以节点3及其左子树都不返回。f (3)调用 f (4) ,4 ∈ [4,6]。f (3)节点4, f (3)返回 f(5) 节点4。上图的二叉搜索树中,我们要求保留 [4,6] 范围上的节点。f(5) 左右都调用完毕,返回节点5。f(5) 左边调用完毕,再去调右边。

Wood_Like的博客 436

LeetCode:669. 修剪二叉搜索树

LeetCode:669. 修剪二叉搜索树

xiaoshiguang3的博客 318

​力扣解法汇总669. 修剪二叉搜索树

​力扣解法汇总669. 修剪二叉搜索树

分享+记录 318

算法训练(leetcode)二刷第十八天 | 669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树

LeetCode二刷

weixin_43872997的博客 751

LeetCode 669. 修剪二叉搜索树(Trim a Binary Search Tree)

669. 修剪二叉搜索树 669. Trim a Binary Search Tree 题目描述 LeetCode LeetCode669. Trim a Binary Search Tree简单 Java 实现 TreeNode Class public class TreeNode { int val; TreeNode left; TreeNode right; ...

weixin_30835649的博客 121

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

LeetCode669. 修剪二叉搜索树

本题核心在于利用二叉搜索树的有序性进行剪枝。如果,直接返回如果,递归右子树如果,递归左子树如果在区间内,递归处理左右子树返回当前节点BST + 递归 + 剪枝这是二叉搜索树问题中非常经典的一类题型。

2503_93062705的博客 219

LeetCode 669. 修剪二叉搜索树

【DFS】如果是null直接返回,如果当前节点小于左边界,返回dfs(right),如果当前节点大于右边界,返回dfs(left),如果当前节点符合要求,那么设置左儿子为dfs(left),右儿子为dfs(right),然后返回就行了。

Sasakihaise_的博客 2634
上一篇: java数据结构与算法刷题-----LeetCode450. 删除二叉搜索树中的节点
下一篇: java数据结构与算法刷题-----LeetCode538. 把二叉搜索树转换为累加树
ydenergy_殷志鹏
博客等级 码龄7年 5886粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值