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

文章目录

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

题目

标题和出处

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

出处: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.rhkb.cn/news/228503.html

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

相关文章

maven中dependencyManagement标签

简介 dependencyManagement正如其名,用于项目依赖的统一管理。 在父项目中的pom.xml文件中加入dependencyManagement标签即可完成依赖版本的声明。在声明完成后,子项目(module)中引用相同的依赖时可以不指定version标签自动引入…

【python报错】UserWarning: train_labels has been renamed targets

UserWarning: train_labels has been renamed targetswarnings.warn(“train_labels has been renamed targets”) 这是一条 Python 警告信息,它表示 train_labels 这个变量已经被重命名为 targets,在将来的版本中可能会移除 train_labels。因此&#x…

51蛋骗鸡595级联1616点阵

缘由如何用单片机独立按键控制16*16LED点阵模块点亮和熄灭?求指导 - 24小时必答区 #include "reg52.h" unsigned char code DuLiAnJian[]{1,2,4,8,16,32,64,128,254,253,251,247,239,223,191,127}; unsigned char code CHARCODE[12][8]{ //{0xFD,0xFD,0x0D,0xED,0x…

如何开发一个google插件(二)

前言 在上一篇文章如何开发一个google插件(一)里主要介绍了google插件的基本结构。 在这篇文章中主要结合reactwebpack进行一个代码演示,源码地址:源码地址 下载源码后打开浏览器的扩展程序管理->加载已解压的扩展程序,即可调试插件 此…

在 Spring 中操作 Redis

🧸欢迎来到dream_ready的博客,📜相信您对博主首页也很感兴趣o (ˉ▽ˉ;) 📜redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿 目录 1、引入依赖 2、对 Redis 的配置文件进行书写 3、S…

Python机器学习原理与算法实现中绘制散点图和线图的操作

作为对数据进行预处理的重要工具之一,散点图(Scatter Diagram)深受专家、学者们的喜爱。散点图的简要定义就是点在直角坐标系平面上的分布图。研究者对数据制作散点图的主要出发点是通过绘制该图来观察某变量随另一变量变化的大致趋势&#x…

小米SU7汽车发布会; 齐碳科技C+轮融资;网易 1 月 3 日发布子曰教育大模型;百度文心一言用户数已突破 1 亿

投融资 • 3200 家 VC 投资的创业公司破产,那个投 PLG 的 VC 宣布暂停投资了• 云天励飞参与 AI 技术与解决方案提供商智慧互通 Pre-IPO 轮融资• 百度投资 AIGC 公司必优科技• MicroLED量测公司点莘技术获数千万级融资• 智慧互通获AI上市公司云天励飞Pre-IPO轮战…

门控循环单元(GRU)-多输入回归预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、全部代码数据分享: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译…

十大排序算法归纳

目录 排序算法的分类 插入排序算法模板 选择排序算法模板 冒泡排序算法模板 希尔排序算法模板 快速排序算法模板 归并排序算法模板 堆排序算法模板 基数排序算法模板 计算排序算法模板 桶排序算法模板 排序算法的分类 插入:插入,折半插入&am…

网站显示不安全警告怎么办?消除网站不安全警告超全指南

网站显示不安全警告怎么办?当用户访问你的网站,而您的网站没有部署SSL证书实现HTTPS加密时,网站就会显示不安全警告,这种警告,不仅有可能阻止用户继续浏览网站,影响网站声誉,还有可能影响网站在…

基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码

基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于蜉蝣算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于蜉蝣优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要:针…

操作系统(Operator System)

这里写目录标题 1. 什么是操作系统2. 主要功能3. 计算机的层状结构4. 什么叫做管理5. 总结6. 为什么要有操作系统7. 最后 1. 什么是操作系统 操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运…

彭涛:2023年终复盘,工作,团队,个人!

眨眼2023即将结束,2024即将开启,每年这个时候,都会简单总结下自己这一年,既是对今年的一个复盘和回顾,也是对新一年的向往和期待。 我的2023年,大概分为 「个人」,「家庭」,「团队」…

C语言实现RSA算法加解密

使用c语言实现了RSA加解密算法,可以加解密文件和字符串。 rsa算法原理 选择两个大素数p和q;计算n p * q;计算φ(n)(p-1)(q-1);选择与φ(n)互素的整数d;由de1 mod φ(n)计算得到e;公钥是(e, n), 私钥是(d, n);假设明…

设计模式(4)--对象行为(11)--访问者

1. 意图 表示一个作用于某对象结构中的各元素的操作。 使你可以在不改变各元素的类的前提下定义于作用于这些元素的新操作。 2. 五种角色 抽象访问者(Visitor)、具体访问者(Concrete Visitor)、抽象元素(Element)、 具体元素(Concrete Element)、对象结构(ObjectStructure) 3…

12 HAL库的硬件SPI驱动数码管

引言: 本文将为大家介绍一下SPI, 数码管的知识, 以及HAL库驱动SPI接口的数码的代码示例。 一、SPI的基础知识 1. SPI简介 01 SPI是串行外设接口(Serial Peripheral Interface)的缩写 02 是美国摩托罗拉公司&#xff08…

【ARMv8M Cortex-M33 系列 2 -- Cortex-M33 JLink 连接 及 JFlash 烧写介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 Jlink 工具JLink 命令行示例JFlash 烧写问题Jlink 工具 J-Link 是 SEGGER 提供的一款流行的 JTAG 调试器,它支持多个平台和处理器。JLink.exe 是 J-Link 调试器的命令行接口,它允许用户通过命令行执行一系列操…

微信小程序开发系列-11组件间通信02

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》 《微信小程序开发系列-02注册小程序》 《微信小程序开发系列-03全局配置中的“window”和“tabBar”》 《微信小程序开发系列-04获取用户图像和昵称》 《微信小程序开发系列-05登录小程序》 《…

打破数据孤岛:ChatGPT如何打通金融大数据的任督二脉?

文章目录 一、引言二、ChatGPT与金融大数据分析的融合三、实践应用:ChatGPT在金融大数据分析中的优势与挑战四、案例分析:ChatGPT在金融大数据分析中的应用案例五、前景展望:ChatGPT在金融大数据分析领域的未来发展《AI时代Python金融大数据分…

[新版Hi3531DV200 性能强悍]

新版Hi3531DV200 性能强悍 Hi3531DV200是针对多路高清/超高清(1080p/4M/5M/4K)DVR产品应用开发的新一代专业SoC芯片。Hi3531DV200集成了ARM A53四核处理器和性能强大的神经网络推理引擎,支持多种智能算法应用。同时,Hi3531DV200还…