力扣第669题 修剪二叉搜索树 c++(注释)

news2024/10/7 8:29:15

题目

669. 修剪二叉搜索树

中等

相关标签

树   深度优先搜索   二叉搜索树   二叉树

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

所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。

示例 1:


输入:root = [1,0,2], low = 1, high = 2
输出:[1,null,2]

示例 2:

输入:root = [3,0,4,null,2,null,null,1], low = 1, high = 3
输出:[3,2,null,1]

提示:

  • 树中节点数在范围 [1, 104] 内
  • 0 <= Node.val <= 104
  • 树中每个节点的值都是 唯一 的
  • 题目数据保证输入是一棵有效的二叉搜索树
  • 0 <= low <= high <= 104

思路和解题方法

给定一个BST的根节点root以及一个范围[low, high],修剪BST使得所有节点的值都在这个范围内。

  • 首先,进行边界情况判断,如果根节点为空,直接返回空指针。
  • 然后,判断根节点的值与范围的关系。
    • 如果根节点的值小于范围的下界low,说明根节点以及它的左子树都应该被修剪掉,因此递归调用trimBST函数,在右子树中继续修剪。
    • 如果根节点的值大于范围的上界high,说明根节点以及它的右子树都应该被修剪掉,因此递归调用trimBST函数,在左子树中继续修剪。
  • 若根节点的值在[low, high]范围内,则递归修剪左右子树,将修剪后的左右子树连接到根节点上。
  • 最后,返回修剪后的根节点。

通过不断递归地修剪左右子树,最终得到修剪后的BST。

复杂度

        时间复杂度:

                O(n)

时间复杂度:假设树中有n个节点,那么每个节点都需要被遍历一次,因此时间复杂度为O(n)。

        空间复杂度

                O(n)

空间复杂度:在递归过程中,使用了系统栈来保存每个递归调用的上下文信息。最坏情况下,树的高度为n,即退化为链表,此时递归调用的深度为n,所需的额外空间也为O(n)。因此,空间复杂度为O(n)。

c++ 代码

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        // 如果根节点为空,返回空指针
        if(root == NULL) return NULL;
        
        // 如果根节点的值小于low,那么修剪BST应该在右子树中进行
        if(root->val < low)
        {
            return trimBST(root->right, low, high);
        }
        
        // 如果根节点的值大于high,那么修剪BST应该在左子树中进行
        if(root->val > high)
        {
            return trimBST(root->left, low, high);
        }
        
        // 若根节点的值在[low, high]范围内,则递归修剪左右子树
        root->left = trimBST(root->left, low, high);
        root->right = trimBST(root->right, low, high);
        
        // 返回修剪后的根节点
        return root;
    }
};

c++精简代码

class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        if (root == nullptr) return nullptr;
        if (root->val < low) return trimBST(root->right, low, high);
        if (root->val > high) return trimBST(root->left, low, high);
        root->left = trimBST(root->left, low, high);
        root->right = trimBST(root->right, low, high);
        return root;
    }
};

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

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

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

相关文章

实验室超声波清洗机有什么优点?

无论是在工业生产中&#xff0c;还是在日常生活中&#xff0c;清洁工作总是贯穿其中。特别是在社会加工过程中&#xff0c;必须清洗仪器和表面的工作量很大。此外&#xff0c;还有许多人力不能接触到需要清洗的部分&#xff0c;需要使用专业设备进行清洗工作。实验室超声波清洗…

【数值分析】0 - 数值分析绪论

文章目录 一、数值分析介绍二、数值分析应用2.1 解三角函数2.2 计算多项式2.3 解线性方程组2.4 供水计划和生产调度计划的制定2.5 湘江水流量估计的实际意义2.6 机器学习或大数据 三、数值分析内容四、数值分析参考书目 学习视频&#xff1a;《数值分析》| 华科 | 研究生基础课…

C++标准模板(STL)- 类型支持 (数值极限,max_digits10,radix,min_exponent)

数值极限 定义于头文件 <limits> 定义于头文件 <limits> template< class T > class numeric_limits; numeric_limits 类模板提供查询各种算术类型属性的标准化方式&#xff08;例如 int 类型的最大可能值是 std::numeric_limits<int>::max() &…

XXL-Job分布式任务调度框架-单机模式和分片模式执行任务4

一 调度模式分类 1.1 调度模式 1.单个任务&#xff1a;一个任务实例便可完成 a)单机单任务&#xff1a;单机模式下任何路由模式都只有一个实例执行 b)集群单任务&#xff1a;由路由策略(广播模式除外)选择其中一个实例完成 2.集群部署&#xff1a;每个实例都同时执行一部分…

RS232电路设计

学习一下RS232的电路设计 在学习过RS485电路设计后&#xff0c;对232就没那么陌生了。 下面我来说一下对于一个新手从0到1 的过程 首先我会查询关于RS232的相关只是&#xff0c;对他有初步了解&#xff0c;在485的基础上很好理解232了。 串口、COM口、UART口, TTL、RS-232、…

尚硅谷Flink(一)

目录 ☄️前置工作 fenfa脚本 &#x1f30b;概述 ☄️Flink是什么 ☄️特点&#xff08;多nb&#xff09; ☄️应用场景&#xff08;不用看&#xff09; ☄️分层API &#x1f30b;配环境 ☄️wordcount ☄️WcDemoUnboundStreaming &#x1f30b;集群部署 ☄️集…

机器视觉工程师为什么要反复调试?

目录 那么程序debug原因有哪些&#xff1f;图像处理debug的原因有哪些&#xff1f; 我们机器视觉项目的程序包含&#xff0c;业务逻辑图像处理&#xff0c;所以我们不单单调试图像处理部分&#xff0c;还要调试C#&#xff0c;界面&#xff0c;数据等等。我们必须保证程序稳定性…

手把手带你用Python和文心一言搭建《AI看图写诗》网页项目(附上完整项目源码)

今年年初&#xff0c;ChatGPT的火爆在全球掀起AI大模型的开发热潮&#xff0c;国内外的科技公司纷纷加入“百模大战”行列。百度在率先发布了国内第一款人工智能大语言模型“文心一言”后&#xff0c;又推出了文心千帆大模型平台&#xff0c;帮助企业和开发者加速大模型应用落地…

ARRI阿莱MXF(ALEXA Mini LF)多碎片重组案例

三大影视巨头ARRI、RED、ATOMOS&#xff0c;ARRI阿莱的设备以提供电影级的画质而在影视圈有很大的名气。ARRI的文件一般是两种&#xff0c;一种是高清MOV&#xff08;苹果为ARRI专门出过特殊认证的编码&#xff09;&#xff1b;一种是高清MXF&#xff1b;相比之下MXF文件比较少…

Vue之Jwt的运用(一起探索JWT在Vue中的用途吧)

目录 前言 一、JWT简介 1. 什么是JWT 2. JWT的工作原理 3. JWT的组成 4. 使用JWT的好处 二、JWT工具类 JwtFilter JwtUtils 工具类的作用 工具类的测试 测试代码 test01()测试结果 test02()测试结果 test03()测试结果 test04测试结果 test05测试结果 三、JWT集成SPA项…

Arya科普 | 程序员常用英语 Java常用名词解释 计算机常用英语汇总

本篇博客汇总了程序员常用的英文单词&#xff0c;Java中常用的名词解释&#xff0c;计算机常用的英语汇总。 英文 A~D array数组 accessible 可存取的 area面积 audio 音频 addition 加法 action 行动 arithmetic 算法 adjustment 调整 actual 真实的 argument 参量 ascent …

CVE-2017-7529 Nginx越界读取内存漏洞

漏洞概述 当使用Nginx标准模块时&#xff0c;攻击者可以通过发送包含恶意构造range域的header请求&#xff0c;来获取响应中的缓存文件头部信息。在某些配置中&#xff0c;缓存文件头可能包含后端服务器的IP地址或其它敏感信息&#xff0c;从而导致信息泄露。 影响版本 Ngin…

Ubutntu 命令行界面显示UI 【FrameBuffer显示GuiLiteSample-Hello3D】

参考资料 https://www.cnblogs.com/jzcn/p/16898249.html https://github.com/idea4good/GuiLiteSamples/tree/master/Hello3D https://github.com/idea4good/GuiLite 显示效果&#xff1a;&#xff08;看看左上角处立方体&#xff09; 使用场景&#xff1a; 嵌入式Linux…

《动手学深度学习 Pytorch版》 8.5 循环神经网络的从零开始实现

%matplotlib inline import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, num_steps 32, 35 train_iter, vocab d2l.load_data_time_machine(batch_size, num_steps) # 仍然使用时间机器数据集8.…

深度学习验证码项目

项目代码&#xff1a; GitHub - kerlomz/captcha_trainer: [验证码识别-训练] This project is based on CNN/ResNet/DenseNetGRU/LSTMCTC/CrossEntropy to realize verification code identification. This project is only for training the model. GitHub - Python3WebSpi…

锂电池行业新技术,RFID技术赋能生产、溯源

随着新能源汽车用动力电池的快速扩大&#xff0c;对锂电池的发展高安全性、高一致性、高合格率和低制造成本提出了更高的要求。而RFID技术被广泛应用在锂电池行业&#xff0c;为锂电池的生产、管理、溯源等生产管理方面提供了极大地便利&#xff0c;提升了生产效率、产品质量和…

【工具软件】mediamtx——网页、vue3项目中播放 rtsp 视频流(支持265转码)

声明 本文只做 mediamtx 的使用实操&#xff0c;请务必参考下面的博客,&#xff0c;我也参考下面的大佬博客&#xff0c;感谢唯一602的无私分享&#xff1a; 在web页面中直接播放rtsp视频流&#xff0c;重点推荐&#xff1a;mediamtx&#xff0c;不仅仅是rtsp mediamtx 介绍 …

Vue的学习补充

1.Vue路由-404 作用&#xff1a;当路径找不到匹配时&#xff0c;给个提示页面 位置&#xff1a;配在路由最后 语法&#xff1a;path:*&#xff08;任意路径&#xff09;-前面不匹配就命中最后这个 2.Vue路由-模式设置 hash路由&#xff08;默认&#xff09; 例如&#xff…

ubuntu mmdetection配置

mmdetection配置最重要的是版本匹配&#xff0c;特别是cuda&#xff0c;torch与mmcv-full 本项目以mmdetection v2.28.2为例介绍 1.查看显卡算力 因为gpu的算力需要与Pytorch依赖的CUDA算力匹配&#xff0c;低版本GPU可在相对高的CUDA版本下运行&#xff0c;相反则不行 算力…

【多线程】Thread类的基本用法

文章目录 线程创建线程中断线程等待线程休眠 线程创建 方法一&#xff1a;用一个类 继承Thread 重写run方法 //创建一个类 继承Thread class MyThread extends Thread {//run方法是线程的入口Overridepublic void run() {while (true){System.out.println("hello Thread…