[100天算法】-二叉树剪枝(day 48)
题目描述
给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1:
输入: [1,null,0,0,1]
输出: [1,null,0,null,1]示例2:
输入: [1,0,1,0,0,0,1]
输出: [1,null,1,null,1]示例3:
输入: [1,1,0,1,1,0,1,0]
输出: [1,1,0,1,1,null,1]说明:给定的二叉树最多有 100 个节点。
每个节点的值只会为 0 或 1 。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-pruning
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
用【产品经理法】的思维来解决递归问题。
产品
假设我们已经有了一个 pruneTree 方法,可以把一棵树中不包含 1 的枝节删掉。
子问题
明显是 pruneTree(root.left) 和 pruneTree(root.right)。
大小问题的关系
首先,对于 root,我们用 pruneTree(root.left) 和 pruneTree(root.right) 的结果分别替换掉原本的 root.left 和 root.right。接着,再决定当前这棵树要不要保留。
- 如果此时左右子树有一个不为空的话,那说明这棵树是要保留的,直接返回
root就行。 - 如果左右子树都为空,那我们就判断
root.val的值,等于 1 就返回root,等于 0 就返回null把这棵树移除。
递归出口
空节点直接返回 null 就行。
代码
TypeScript Code
/*** Definition for a binary tree node.* class TreeNode {* val: number* left: TreeNode | null* right: TreeNode | null* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }* }*/function pruneTree(root: TreeNode | null): TreeNode | null {if (!root) return null;root.left = pruneTree(root.left);root.right = pruneTree(root.right);return root.left || root.right || root.val === 1 ? root : null;
}
复杂度分析
- 时间复杂度:$O(N)$,N 为二叉树节点数。
- 空间复杂度:$O(H)$,H 为二叉树的高度,递归栈的最大空间。
相关文章:
[100天算法】-二叉树剪枝(day 48)
题目描述 给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1: 输入: [1,null,0,0,1] 输出: [1,null,0,null,1]示例2: 输入: […...
常用编程语言排行与应用场景汇总(2023.10)
文章目录 编程语言排行一、Python二、C三、C四、Java五、C#六、JavaScript七、VB(Visual Basic)八、PHP九、SQL十、ASM(Assembly Language)十一、Go十二、Scratch十三、Delphi/Object Pascal十四、MATLAB十五、Swift十六、Fortran…...
基于 MySQL 多通道主主复制的机房容灾方案
文章中介绍了多种 MySQL 高可用技术,并介绍了根据自身需求选择多通道主主复制技术的过程和注意事项。 作者:徐良,现任中国移动智慧家庭运营中心数据库高级经理,多年数据库运维优化经验,历任华为、一线互联网公司高级 D…...
视频汇聚平台EasyCVR分发的流如何进行token鉴权?具体步骤是什么?
视频监控EasyCVR平台能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视…...
B-5:网络安全事件响应
B-5:网络安全事件响应 任务环境说明: 服务器场景:Server2216(开放链接) 用户名:root密码:123456 1.黑客通过网络攻入本地服务器,通过特殊手段在系统中建立了多个异常进程,找出启动异常进程的脚本,并将其绝对路径作为Flag值提交; 通过nmap扫描我们发现开启了22端口,…...
第17期 | GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练 Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…...
透视俄乌网络战之五:俄乌网络战的总结
透视俄乌网络战之一:数据擦除软件 透视俄乌网络战之二:Conti勒索软件集团(上) 透视俄乌网络战之三:Conti勒索软件集团(下) 透视俄乌网络战之四:西方科技巨头的力量 俄乌网络战总结 1…...
深度学习之基于Pytorch卷积神经网络的图像分类系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介二、功能三、图像分类系统四. 总结 一项目简介 基于PyTorch卷积神经网络的图像分类系统是一种应用深度学习技术来实现图像分类任务的系统。本摘要将对该系统…...
外观专利怎么申请?申请外观专利需要的资料有哪些?
专利分为发明专利、实用新型专利和外观设计专利三类。 我国专利法规定,发明专利的保护期限最长,为自申请日起20年。同时,由于需要进行实质审查,发明专利的审查周期也相对较长,往往需要2年甚至更长时间才能获得授权。 随…...
【Amazon】跨AWS账号资源授权存取访问
文章目录 一、实验框架图二、实验过程说明三、实验演示过程1、在A账号中创建S3存储桶2、在A账号创建S3存储桶访问策略3、在A账号创建信任开发账号的角色4、在B账号为用户添加内联策略5、在B账号中切换角色,以访问A账号中的S3资源 四、实验总结 一、实验框架图 本次…...
探索C++中的不变之美:const与构造函数的深度剖析
W...Y的主页😊 代码仓库分享💕 🍔前言: 关于C的博客中,我们已经了解了六个默认函数中的四个,分别是构造函数、析构函数、拷贝构造函数以及函数的重载。但是这些函数都是有返回值与参数的。提到参数与返回…...
DDoS类型攻击对企业造成的危害
超级科技实验室的一项研究发现,每十家企业中,有四家(39%)企业没有做好准备应对DDoS攻击,保护自身安全。且不了解应对这类攻击最有效的保护手段是什么。 由于缺乏相关安全知识和保护,使得企业面临巨大的风险。 当黑客发动DDoS攻击…...
深入理解JVM虚拟机第十五篇:虚拟机栈常见异常以及如何设置虚拟机栈的大小
大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻JavaScript 本文章简介:话不多说,让我们讲清楚JavaScript里边的Math 文章目…...
Rocketmq5延时消息最大时间
背景 Rocketmq5中支持延时消息的时间,通过Message.setDelayTimeSec可以设置延时消息的精确时间。 问题 当设置时间超过3天时出现异常 org.apache.rocketmq.client.exception.MQBrokerException: CODE: 13 DESC: timer message illegal, the delay time should no…...
uniapp @click点击事件在新版chrome浏览器点击没反应
问题描述 做项目时,有一个弹出选择的组件,怎么点都不出来,最开始还以为是业务逻辑限制了不能点击。后来才发现别人的电脑可以点出来,老版本的浏览器也可以点出来,最后定位到是新版的chrome就不行了 这是我的浏览器版本…...
beanDefinition读取器
编程式定义 BeanDefinition:自定义一个BeanDefinition, AbstractBeanDefinition beanDefinition BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition(); 设置beanClass 注册到容器中 B…...
linux 上flink单机安装详解
目录 一 准备安装包 二 解压 三 配置环境变量 四 验证是否部署成功 一 准备安装包 官网地址: Downloads | Apache Flink 百度网盘资源: 链接: https://pan.baidu.com/s/15aXmF3JLxnOlPiDxId637Q?pwdsqsx 提取码: sqsx 这里准备的版本是flink1.13…...
数据链路层中存在的报文ip,arp,rarp
IP数据报 ARP请求/应答报 RARP请求/应答报 IP数据报 这里的目的地址和源地址是MAC地址。 这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。 MAC 地址是一个很容易让人误解的地址。因为 MAC 地址号称全球唯一&…...
【Tricks】PC端微信输入时,文本出现右对齐情况怎么恢复
应该是摁到某个快捷键,于是光标就变成如下图所示的样子: 如果再输入字符,则字符就会变成下图所示的样子(对齐输入框右侧): 解决办法:ctrl J 解决办法:ctrl J 解决办法࿱…...
python使用requests+excel进行接口自动化测试
在当今的互联网时代中,接口自动化测试越来越成为软件测试的重要组成部分。Python是一种简单易学,高效且可扩展的语言,自然而然地成为了开发人员的首选开发语言。而requests和xlwt这两个常用的Python标准库,能够帮助我们轻松地开发…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
Selenium 查找页面元素的方式
Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式: 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...
