111、【树与二叉树】leetcode ——669. 修剪二叉搜索树:递归法(C++版本)

news2024/9/20 21:31:57

题目描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路

本题的关键是用好递归这个结构,用好每次他向下的遍历和返回的值。每一次递归时,相当于解决与之前相同的问题,因此先按某一种类子问题进行讨论(仅有三个结点的满二叉树),当递归的方式向下遍历时,处理逻辑与之相同。用好递归去改变指向,而不用自己去调整整个树。

大题思路类似于 450.删除二叉搜索树中的节点(递归法+迭代法) ,区别在于删除的是某一区域的节点值,并且要保留区域内部的节点值。

对于第一次找到结点值小于low的情况,有两种:(1)该结点无右子树,那么直接删除这个结点及以下的子树即可,返回NULL;(2)该结点有右子树,那么右子树中可能有大于low的情况,需要继续向右遍历。

同理,对于第一次找到结点值大于high的情况,也有两种:(1)该结点无左子树,那么直接删除这个结点及以下的子树即可,返回NULL;(2)该结点有左子树,那么左子树中可能有小于high的情况,需要继续向左遍历。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* trimBST(TreeNode* root, int low, int high) {
        if(!root)                   return NULL;
        // 当找到的结点值小于low时,继续向右遍历,保留大于low的,删除小于low的
        if(root->val < low)         return trimBST(root->right, low, high);
        // 当找到的结点值大于high时,继续向左遍历,保留小于high的,删除大于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;
    }
};

参考文章:669. 修剪二叉搜索树

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

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

相关文章

二本学历5年经验的程序员,出去面试被碾压~

目录 1、从一个求职案例引入2 、学历差距&#xff1a;面试官的第一印象3、公司背景差距&#xff1a;你的人生名片4、技术差距&#xff1a;硬核能力的欠缺5、架构能力的差距6、面试结果的分析 这篇文章&#xff0c;聊一个很多人感兴趣的话题&#xff0c;小公司的Java工程师和大…

计网必会:HTPP详解、cookie、缓存

文章目录应用层协议Web和HTTPHTTP 概述采用非持续连接的HTTPRTT 往返时间的定义**三次握手过程**采用持续连接的HTTPHTTP到底采用哪个&#xff1f;HTTP 的报文格式请求报文功效格式响应报文状态码格式Cookie什么是cookieWeb缓存在学习的过程很多人都遇到了HTTP和Cookie&#xf…

【matplotlib】19.基本用法

#【matplotlib】19.基本用法 2021.1.19 画figure图基本方法。参考&#xff1a; https://m.runoob.com/matplotlib/matplotlib-pyplot.html https://mofanpy.com/tutorials/data-manipulation/plt/figure matplotlib 是python的画图包 19.1 基础使用 plot图&#xff0c;就是以…

JavaEE2-Spring核心与设计思想

目录 1.Spring是什么&#xff1f; 2.容器是什么&#xff1f; 3.IoC是什么&#xff1f; 3.1.传统程序开发 3.2.控制反转式程序开发 3.3.对比总结规律 4.理解Spring IoC 4.1.将对象(Bean)存入到容器(Spring)&#xff1b; 4.2.从容器中取出对象。 5.DI概念说明 1.Spring…

LINUX---进程

目录相关概念1.什么是程序&#xff0c;什么是进程&#xff0c;有什么区别2.如何查看系统中有哪些进程3.进程标识符4.父进程&#xff0c;子进程5.C程序的存储空间是如何分配的创建进程函数forkvforkfork创建进程:vfork创建进程&#xff1a;进程退出正常退出&#xff1a;异常退出…

在XXX中找到了XXX的副本,但是当前代码与XXX中内置的版本不同【几种解决方案】

Microsoft VS警告类似如图所示&#xff1a; 然后发现编译编写好的代码无法打断点。定义的变量无法获取。 方案一&#xff1a; 把提示的该文件备份在其他文件夹一份&#xff0c;然后在项目中删除该文件。再把备份的文件放到该项目中。然后再编译。 方案二&#xff08;参考该博客…

Udev设备管理器

udev 引入 在2.4内核中 引入了 devfs&#xff0c;他支持设备节点的动态创建。devfs提供了在内存中的文件系统中创建设备节点的能力。设备驱动程序能够自主的管理自己的设备文件。而命名节点的任务还是落到了设备驱动程序头上。但是&#xff0c;设备命名策略是可管理的&#xf…

【设计模式】结构型模式·适配器模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 写作不易&#xff0c;如果您觉得写的不错&#xff0c;欢迎给博主来一波点赞、收藏~让博主更有动力吧&#xff01; 一. 概述 将一个类的接口转换成客户希望的另外一个接口&#xff0c;使得原本接口不兼容而不能一…

分布式搜索引擎--Elasticsearch

1.1 相关术语 和mysql类比 索引&#xff1a;数据库&#xff0c;database&#xff0c;6.0以后变化&#xff0c;对应表 类型&#xff1a;table&#xff0c;6.0以后变化&#xff0c;废弃 文档&#xff1a;一张表里的一行 字段&#xff1a;一个属性就是一个字段 和分布式相关 集群…

NLP学习笔记(六) Transformer简明介绍

大家好&#xff0c;我是半虹&#xff0c;这篇文章来讲 Transformer\text{Transformer}Transformer&#xff0c;想要获取更多相关文章&#xff0c;欢迎关注 自然语言处理 专栏 在之前的两篇文章中&#xff0c;我们介绍过序列到序列模型以及注意力机制在序列到序列模型中的应用 …

Linux开启Docker远程访问并设置安全访问(证书密钥),附一份小白一键设置脚本哦!

前言 喜欢折腾慢慢看&#xff0c;不喜欢折腾直接跳到小简下文的一键脚本那里&#xff0c;两分钟搞好。 我的博客&#xff1a;https://blog.ideaopen.cn 我的公众号&#xff1a;小简聊开发 开启远程访问 编辑docker.service文件 vi /usr/lib/systemd/system/docker.service # …

Python FastAPI 框架 操作Mysql数据库 增删改查

2 比 1 更容易理解&#xff0c;可以先看2&#xff08;单文件级别&#xff09; 1、FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库。 在这里&#xff0c;让我们看一个使用着SQLAlchemy的示例。 您可以很容易地将SQLAlchemy支持任何…

每天进步一点点,今天来学结构体

什么是结构体&#xff1f; C 语言允许用户自己指定这样一种数据结构&#xff0c;它由不同类型的数据组合成一个整体&#xff0c;以便引用&#xff0c;这些组合在一个整体中的数据是互相联系的&#xff0c;这样的数据结构称为结构体&#xff0c;它相当于其它高级语言中记录。 …

01、数据结构——数组

一、数据结构与算法 数据结构是一门研究组织数据方式的学科&#xff0c;有了编程语言也就有了数据结构。学好数据结构可以编写出更加漂亮、更加有效率的代码。程序数据结构算法数据结构是算法的基础 二、稀疏数组&#xff1a; 1、基本介绍&#xff1a; 当一个数组中大部分元…

【Javascript】文本转语音SpeechSynthesisUtterance

SpeechSynthesisUtterance基本介绍 SpeechSynthesisUtterance是HTML5中新增的API,用于将指定文字合成为对应的语音.也包含一些配置项,指定如何去阅读(语言,音量,音调)等 SpeechSynthesisUtterance基本属性 SpeechSynthesisUtterance.lang 获取并设置话语的语言 SpeechSynthesis…

InfluxDB 笔记

概念 Measurement 类似于表名。 A measurement acts as a container for tags, fields, and timestamps. Tag 补充描述数据的信息&#xff0c;如示例中的location和scientist描述了该数据的采集地和采集人。这两个称为Tag Key&#xff0c;具体的值则称为Tag Value&#xff0c…

小程序基础篇-视图与逻辑

本次学习目标&#xff1a;实现页面间的导航跳转实现下拉刷新实现上拉加载更多知道小程序常用的生命周期函数1.页面导航页面导航指的是页面之前相互的跳转浏览器之间的页面导航有两种&#xff1a;<a>;location.href小程序之间的页面导航有两种&#xff1a;声明式导航&…

告警与恢复告警原理及实现

一、 背景自“双碳”政策提出以来&#xff0c;KaiwuDB 聚焦“数字能源”领域&#xff0c;为用户打造数字能源管理平台&#xff0c;旨在提升综合能源和碳资产管理能力。数字能源管理平台是以 KaiwuDB 为核心建设的云-边-端一体化数据服务平台&#xff0c;致力于为 IoT、工业互联…

前言技术--swagger

目录一、前后端分离的特点二、在没有swagger之前三、swagger的作用四、swagger的优点五、集成swagger5.1 新建springboot项目5.2 集成swagger5.3 开发一个controller用于测试5.4 启动服务&#xff0c;验证集成效果六、swagger常用注解七、swagger使用综合案例一、前后端分离的特…

Python的PyQt框架的使用-常用控件篇

Python的PyQt框架的使用-常用控件篇一、前言二 、QLineEdit 文本框三 、QPushButton按钮控件四、QRadioButton 单选按钮一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;小伙伴们&#xff0c;让我们一起来学习Python的PyQt框架的常用控件。如果文章对你有帮助、欢迎…