二叉树题目:根到叶路径上的不足结点

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:根到叶路径上的不足结点

出处:1080. 根到叶路径上的不足结点

难度

6 级

题目描述

要求

给定二叉树的根结点 root \texttt{root} root 和整数 limit \texttt{limit} limit,同时删除树中的所有不足结点,然后返回结果二叉树的根结点。

如果经过一个结点的所有根到叶路径都满足路径上的结点值总和严格小于 limit \texttt{limit} limit,则该结点是不足结点

示例

示例 1:

示例 1

输入: root = [1,2,3,4,-99,-99,7,8,9,-99,-99,12,13,-99,14], limit = 1 \texttt{root = [1,2,3,4,-99,-99,7,8,9,-99,-99,12,13,-99,14], limit = 1} root = [1,2,3,4,-99,-99,7,8,9,-99,-99,12,13,-99,14], limit = 1
输出: [1,2,3,4,null,null,7,8,9,null,14] \texttt{[1,2,3,4,null,null,7,8,9,null,14]} [1,2,3,4,null,null,7,8,9,null,14]

示例 2:

示例 2

输入: root = [5,4,8,11,null,17,4,7,1,null,null,5,3], limit = 22 \texttt{root = [5,4,8,11,null,17,4,7,1,null,null,5,3], limit = 22} root = [5,4,8,11,null,17,4,7,1,null,null,5,3], limit = 22
输出: [5,4,8,11,null,17,4,7,null,null,null,5] \texttt{[5,4,8,11,null,17,4,7,null,null,null,5]} [5,4,8,11,null,17,4,7,null,null,null,5]

示例 3:

示例 3

输入: root = [1,2,-3,-5,null,4,null], limit = -1 \texttt{root = [1,2,-3,-5,null,4,null], limit = -1} root = [1,2,-3,-5,null,4,null], limit = -1
输出: [1,null,-3,4] \texttt{[1,null,-3,4]} [1,null,-3,4]

数据范围

  • 树中结点数目在范围 [1, 5000] \texttt{[1, 5000]} [1, 5000]
  • -10 5 ≤ Node.val ≤ 10 5 \texttt{-10}^\texttt{5} \le \texttt{Node.val} \le \texttt{10}^\texttt{5} -105Node.val105
  • -10 9 ≤ limit ≤ 10 9 \texttt{-10}^\texttt{9} \le \texttt{limit} \le \texttt{10}^\texttt{9} -109limit109

解法

思路和算法

这道题要求同时删除二叉树中的所有不足结点。「同时」的含义是不会因为有结点被删除而改变根到叶路径上的结点值总和,只要遵循该规则,即可从叶结点开始依次删除结点。

由于这道题需要计算根到叶路径上的结点值总和,因此可以使用深度优先搜索实现。深度优先搜索的过程中,对于每个结点都可以计算从根结点到当前结点的路径上的结点值总和(结点值总和不包括当前结点),并更新 limit \textit{limit} limit,只有当从当前结点到叶结点的路径上的结点值总和大于等于更新后的 limit \textit{limit} limit 时,从根结点到叶结点的路径上的结点值总和才大于等于原始的 limit \textit{limit} limit。因此,可以在深度优先搜索的过程中对于每个结点维护当前结点剩余的 limit \textit{limit} limit,根结点剩余的 limit \textit{limit} limit 即为原始的 limit \textit{limit} limit,根结点的子结点剩余的 limit \textit{limit} limit 为原始的 limit \textit{limit} limit 与根结点值之差。

根据定义,经过不足结点的所有根到叶路径都满足路径上的结点值总和严格小于 limit \textit{limit} limit。由于每个叶结点都只有一条路径经过,因此首先对叶结点执行删除不足结点的操作。对于叶结点,如果其结点值严格小于剩余的 limit \textit{limit} limit,则删除当前结点。

对于非叶结点,对其每个非空子树递归地删除不足结点。如果在对当前结点的非空子树删除不足结点之后,当前结点变成叶结点,则经过当前结点的所有根到叶路径都满足路径上的结点值总和严格小于 limit \textit{limit} limit,因此当前结点是不足结点,删除当前结点。

遍历结束之后,二叉树中的所有不足结点都被删除,返回删除不足结点之后的二叉树。

代码

class Solution {public TreeNode sufficientSubset(TreeNode root, int limit) {return dfs(root, limit);}public TreeNode dfs(TreeNode node, int limit) {TreeNode left = node.left, right = node.right;if (left == null && right == null) {return node.val >= limit ? node : null;}limit -= node.val;if (left != null) {node.left = dfs(left, limit);}if (right != null) {node.right = dfs(right, limit);}if (node.left == null && node.right == null) {return null;}return node;}
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。每个结点都被访问一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是二叉树的结点数。空间复杂度主要是递归调用的栈空间,取决于二叉树的高度,最坏情况下是 O ( n ) O(n) O(n)

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

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

相关文章

关键字:throw关键字

在 Java 中,throw关键字用于抛出异常。当程序执行过程中发生意外情况,如错误的输入、资源不足、错误的逻辑等,导致程序无法正常执行下去时,可以使用throw关键字抛出异常。 以下是使用throw关键字的一些示例: 抛出异常…

服装店收银系统不只是收银 还需要线上商城和线上批发

一个综合性的服装店收银系统可以结合线上商城和线上批发功能,提供以下特点和优势: 线上商城:将服装店的商品信息同步到线上商城平台,让顾客可以通过网站或移动应用程序浏览和购买商品。线上商城可以实现在线支付、订单跟踪、售后服…

MySQL数据库索引优化

一、引言 1. 索引的重要性 MySQL数据库索引的重要性主要体现在,一是查询速度优化,索引可以极大地提高查询速度。对于没有索引的表,MySQL必须进行全部扫描来找到所需的行,如果表中数据量很大,那么通常很慢。通过适当的…

大数据规模存储的几个核心问题

文章目录 三个关键问题RAID(独立磁盘冗余阵列)RAID是如何解决关于存储的三个关键问题?水平伸缩 大规模数据存储都需要解决几个核心问题,这些问题都是什么呢? 三个关键问题 1.数据存储容量的问题 既然大数据要解决的…

图像分割实战-系列教程1:语义分割与实例分割概述

🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 下篇内容: Unet系列算法 1、图像分割任务概述 1.1 图像分割 分割任务就是在原始图像…

Elasticsearch8集群部署

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 本文记录在3台服务器上离线搭建es8.7.1版本集群。 1. 修改系统配置 1.1 hosts配置 在三台es节点服务器加入hostname解析&…

加法器原理详解

加法器的介绍与原理分析 什么是加法器? 加法器是一种数字电路,用于将两个二进制数相加并输出它们的和。 如何实现加法器 要讨论如何实现加法器就要先从只有一位的数字先进行考虑 一位二进制数相加 不考虑来自低位的进位——半加器 对于一位二进制…

【VTK三维重建-体绘制】第四期 VTK中GPU加速

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 上期内容讲到VTK的体绘制技术vtkGPUVolumeRayCastMapper,本文分享VTK中GPU加速的相关内容,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会…

机器学习的分类与经典算法

机器学习算法按照学习方式分类,可以分为有监督学习(Supervised Learning)、无监督学习(Unsupervised Learning)、半监督学习(Semi-supervised Learning)、强化学习(Reinforcement Le…

图文证明 等价无穷小替换

等价无穷小替换 定义 等价无穷小是无穷小之间的一种关系,指的是:在同一自变量的趋向过程中,若两个无穷小之比的极限为1,则称这两个无穷小是等价的。无穷小等价关系刻画的是两个无穷小趋向于零的速度是相等的。 设当 x → x 0 时…

Android 接入第三方数数科技平台

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数数科技平台是什么?二、使用步骤1.集成SDK2. 初始化3. 发送事件和设置账号id4. 验证发送事件是否成功 小结 前言 一个成熟的App必然不可缺少对…

算法学习系列(十四):并查集

目录 引言一、并查集概念二、并查集模板三、例题1.合并集合2.连通块中点的数量 引言 这个并查集以代码短小并且精悍的特点,在算法竞赛和面试中特别容易出,对于面试而言,肯定不会让你去写一两百行的代码,一般出的都是那种比较短的…

服务器的TCP连接限制:如何优化并提高服务器的并发连接数?

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注),发送【资料】可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景、中间件系列…

mysql基础-表操作

环境: 管理工具:Navicat 数据库版本:5.7.37 mysql的版本,我们可以通过函数,version()进行查看,本次使用的版本如下: 目录 1.管理工具 1.1创建表 1.2.修改表名 1.3.复制表 1.4.删除表 2…

python开发的app有哪些,python如何开发小软件

这篇文章主要介绍了python开发的app有哪些,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 Python 无处不在,可以说是现代的 C 编程语言,你可以在任何地…

54.网游逆向分析与插件开发-游戏增加自动化助手接口-项目需求与需求拆解

内容来源于:易道云信息技术研究院VIP课 项目需求: 为游戏增加VIP功能-自动化助手。自动化助手做的是首先要说一下背景,对于授权游戏来讲它往往年限都比较老,老游戏和新游戏设计理念是不同的,比如说老游戏基本上在10年…

easyx的窗口函数

文章目录 前言一、EasyX的颜色二、EasyX的坐标和设备1,EasyX的坐标2,EasyX的设备 三、窗口函数1,初始化窗口函数2,关闭绘图窗口3,设置窗口背景板颜色4,清空绘图设备 前言 easyx是针对c的图形库,…

360高级java面试真题

今年IT寒冬,大厂都裁员或者准备裁员,作为开猿节流主要目标之一,我们更应该时刻保持竞争力。为了抱团取暖,林老师开通了《知识星球》,并邀请我阿里、快手、腾讯等的朋友加入,分享八股文、项目经验、管理经验…

在kuboard页面配置harbor地址,配置私有仓库

点击项目-配置中心-密文,配置harbor地址 配置完仓库地址需要在对应的k8s master节点 worker节点,配置私有仓库地址要是不配置会报错 [rootk8smaster ~]# docker login 10.4.7.9:80/ -u admin -p Harbor12345 WARNING! Using --password via the CLI is…