leecode每日一题 1080 根到叶路径上的不足节点

news2024/12/23 17:55:27

题目描述

给你二叉树的根节点 root 和一个整数 limit ,请你同时删除树中所有 不足节点 ,并返回最终二叉树的根节点。

假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 limit,则该节点被称之为 不足节点 ,需要被删除。

叶子节点,就是没有子节点的节点。

 

输入: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]

题解

一开始的想法很简答,如果需要经过这个节点的每个路径的节点总和全都比limit小,那么只要我为每个节点算出它经过它的所有路径的总和的最大值,如果这个最大值比limit还要小,那么它就符合条件,应该置为null。

我就写了两次递归,一次递归,把父节点的累加和传递到子节点,然后回传的时候,比较一下最大值,保留最大值。第二次递归,判断每个节点的最大值,如果小于limit,就置为null,这样也能做出来,但是结果非常的差(对应下图第一次提交)。

写的过程中,我也发现上面的做法很冗余,于是想了一下,我们把这颗树简化,抽出某个子树如下。

 

 

会发现,如果某个父节点的两个叶节点的累加和都小于limit的话,那说明经过它的这两种路径的累加和,都会小于limit,那么这个节点其实就是不足节点。

这样其实就很好做了,下面看下实现。

class TreeNode {
    int val;
    int max = Integer.MIN_VALUE;
    TreeNode left;
    TreeNode right;
    TreeNode() {}
    TreeNode(int val) { this.val = val; }
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }

    public void compare(int max) {
        if (max > this.max){
            this.max = max;
        }
    }
}

class Solution {
    public TreeNode sufficientSubset(TreeNode root, int limit) {
        return computeMax(root, 0, limit);
    }

    public TreeNode computeMax(TreeNode root, int parentSum, int limit){
        int result = parentSum + root.val;
        if(root.left == null && root.right == null){
            if (result < limit){
                return null; //如果叶子节点的累加和小于limit,说明经过这个节点的所有路径的和都小于limit,这个节点就是不足节点。
            } else {
                return root; //反之正常的节点,则返回它本身。
            }
        }

        if (root.left != null){
            root.left = computeMax(root.left, result, limit);
        }

        if (root.right != null){
            root.right = computeMax(root.right, result, limit);
        }

        if (root.left == null && root.right == null){ //如果这个节点的左右叶子节点都是不足节点,那说明经过这个节点的所有路径的和小于limit,它自己也是不足节点。
            return null;
        } else {
            return root;
        }
    }
}

提交结果

 

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

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

相关文章

接口测试神器, ApiKit ,亲测好用

自己关注的公众号比较多&#xff0c;之前有收到过有关 ApiKit 的文章&#xff0c;自己也是大致看看,还没有用过它&#xff01; 最近看到比较多有关 ApiKit 的文章&#xff0c;所以自己就花了点时间去研究它&#xff0c;使用完后发现确实比Postman功能更强大&#xff0c;界面也…

Redis7实战加面试题-基础篇(Redis复制(replica),Redis哨兵(sentinel),Redis集群(cluster))

Redis复制(replica) 就是主从复制&#xff0c;master以写为主&#xff0c;Slave以读为主。当master数据变化的时候&#xff0c;自动将新的数据异步同步到其它slave数据库。 能干嘛&#xff1a;读写分离&#xff0c;容灾恢复&#xff0c;数据备份&#xff0c;水平扩容支撑高并发…

【阿里云】阿里云OSS对象存储— 开通OSS服务、搭建OSS环境、快速入门

目录 一、开通OSS服务 二、搭建OSS环境 1、创建Bucket存储空间 2. 创建文件夹上传图片 3. RAM 访问控制 三、快速入门 1.下载SDK 2.创建存储空间[可选] 3.上传图片 一、开通OSS服务 二、搭建OSS环境 1、创建Bucket存储空间 选择 Bucket列表&#xff0c;进行Bucket创建…

LeetCode54 螺旋矩阵

给你一个m行n列的矩阵matrix&#xff0c;请按照顺时针螺旋顺序&#xff0c;返回矩阵中的所有元素。 示例1 输入&#xff1a; matrix [[1,2,3],[4,5,6],[7,8,9] 输出&#xff1a; [1,2,3,6,9,8,7,4,5] 示例2 输入&#xff1a; matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出…

新冠又临“涨潮”期,看我AI显身手

#疫情#北京时间5月24日&#xff0c;北京市卫生健康委发布2023年第20周疫情周报。报告显示&#xff0c;2023年第20周全市共报告法定传染病14种25544例&#xff0c;死亡1例。报告病例数居前5位的病种依次为:新型冠状病毒感染、其它感染性腹泻病、流行性感冒、肺结核和病毒性肝炎&…

chatgpt赋能python:Python的shutil模块:探讨删除文件和目录的方法

Python的shutil模块&#xff1a;探讨删除文件和目录的方法 Python是一种高级编程语言&#xff0c;拥有大量的标准库&#xff0c;其中shutil模块是处理文件的一种非常强大的模块。shutil提供了多种方式来复制、移动和删除文件和目录。 在本文中&#xff0c;我们将探讨Python的…

英特尔13代桌面CPU平台安装ubuntu20.04LTS记录

安装环境一&#xff1a; i7-13700K 华硕Z790-P 16X2GB内存 华硕 TUF 3070 O8G安装环境二&#xff1a; i5-13400 华硕B760M-A D4 8x2GB内存 UHD730核显安装系统&#xff1a; ubuntu20.04LTS(首先用光驱安装失败&#xff0c;后面用U盘更换ubuntu22.04.2LTS成功) 因为…

用工业显微镜来观察生物细胞

尝试用工业显微镜来观察生物细胞&#xff0c;成像质量不是很好&#xff0c;但感觉还是能看一下。专业生物用显微镜真的太贵了。 软件&#xff1a;JCameraPro可以在这下载&#xff1a;www.jfirmware.com 摄像机&#xff1a;OPLENIC Cam的某个OEM版。 OPLENIC Cam很多OEM版&am…

SocketException: 由于目标计算机积极拒绝,无法连接。

本文只有解决思路没有具体方法&#xff08;因为错误不一定是因为这个&#xff09;。 在做.NETWebService的时候遇到了个问题&#xff0c;这是在用本地提供WebService服务以后出现的错误。 我的解决办法是把连接的服务删了在重连就好了&#xff0c;挺奇怪的。在网上查的方法各式…

Vue + Axios - HTTP POST 请求示例 (外网地址)

从 npm 安装 axios 使用npm CLI&#xff1a;npm install axios 使用yarn CLI&#xff1a;yarn add axios app.vue文件: <template><Postrequest/> </template><script> import Postrequest from ./components/Postrequest.vue; export default {nam…

Helm部署高可用rabbitmq k8s 镜像集群

前提条件&#xff1a;k8s集群、harbor私服、helm、storage Class 安装部署 添加bitnami仓库并查找redis helm repo add bitnami https://charts.bitnami.com/bitnami ​ helm repo update [kmningk8s-register-node ~]$ helm search repo rabbitmq NAME …

Linux第一节

linux用的分区格式是 XFS EXT4 nmtui //网络使用文字显示的命令 //进去后修改IP信息 常用SSH管理工具 PC端: Mobaxterm、PuttyWinSCP、XshellXftp、SecureCRT等手机端:iTerminal、华为云APP、阿里云APP等 LINUX中补全命令&#xff0c;按两次tab键 在登录界面&#xff0c;al…

40G QSFP+ LR4光模块两种类型的概述:CWDM4 vs PSM4

40G QSFP LR4光模块被广泛用于40G网络中&#xff0c;它包含40G QSFP LR4 CWDM4光模块和40G QSFP LR4 PSM4光模块两种类型。前者用来连接波分复用链路&#xff0c;后者用来连接并行单模光纤链路&#xff0c;但是这两种模块之间有什么区别呢&#xff1f;下文易天光通信&#xff0…

线程的状态,多线程带来的风险,synchronized关键字及死锁问题

目录 状态 线程的意义 多线程带来的风险——线程安全✅ 线程安全的概念 线程不安全的原因 抢占式执行&#xff0c;随机性调度 修改共享数据 原子性->加&#x1f512; 可见性 指令重排序 解决线程不安全问题&#xff08;学完线程再总结&#xff09; synchronized关键字——监…

使用electron套壳vue实现跨平台桌面应用

electron和vue是什么就不用多说了&#xff0c;前端都知道 先展示一波demo 传送门 前提条件 要有一个vue项目&#xff0c;老项目跳过 vue create hello-world改造vue项目 在根目录新建一个background.js文件&#xff0c;也可以叫其他名字&#xff0c;作为package.json的main…

C Primer Plus第五章编程练习答案

学完C语言之后&#xff0c;我就去阅读《C Primer Plus》这本经典的C语言书籍&#xff0c;对每一章的编程练习题都做了相关的解答&#xff0c;仅仅代表着我个人的解答思路&#xff0c;如有错误&#xff0c;请各位大佬帮忙点出&#xff01; 1.编写一个程序&#xff0c;把用分钟表…

微信小程序---表格的制作并展示云数据库中的数据

微信小程序并没有表格组件&#xff0c;可能是官方考虑到&#xff0c;在前端开发中&#xff0c;表格的嵌套性太多&#xff0c;用DIV代码会比较简洁就没有实现吧。没有现成的组件可以使用&#xff0c;针对这个问题&#xff0c;目前有两种解决方案&#xff1a; 1&#xff09;内嵌…

怎么发表CCF期刊?CCF期刊有什么不同之处? - 易智编译EaseEditing

发表CCF期刊&#xff0c;可以参考一下步骤&#xff1a; 选择目标期刊&#xff1a; 首先选择一个适合自己的目标期刊&#xff0c;可以是CCF推荐的高水平期刊&#xff0c;也可以是其他被广泛认可的期刊。 撰写论文&#xff1a; 根据目标期刊的要求&#xff0c;撰写论文。确保论…

「恋爱事务」NFT 作品集

「恋爱事务 (Love Affairs)」服装 NFT系列允许玩家在体验中使用 Opera Garnier 歌剧院的 T台大厅&#xff0c;并参与互动竞赛。参与 The Sandbox 元宇宙首个以爱情为主题的概念时装秀&#xff01; 该系列已于 5 月 22 日晚上 11 点在 The Sandbox 市场平台上线。 NFT 系列介绍 …

go-zero的服务发现源码阅读

服务发现原理与grpc源码解析_wangxiaoangg的博客-CSDN博客 go-zero rpc demo官方文档&#xff1a;rpc编写与调用 | go-zero 目录 一 服务注册 1. 创建rpc服务 2. 启动rpc服务 3. registerEtcd做了什么 4. discov.NewPublisher 服务发布者 二 服务发现 1.定义&注册re…