LeetCode刷题系列 -- 1080. 根到叶路径上的不足节点

news/2024/11/14 23:23:49/

给定一棵二叉树的根 root,请你考虑它所有 从根到叶的路径:从根到任何叶的路径。(所谓一个叶子节点,就是一个没有子节点的节点)

假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 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]

示例 2:

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

示例 3:

输入:root = [5,-6,-6], limit = 0

输出:[]

提示:

  1. 给定的树有 1 到 5000 个节点

  1. -10^5 <= node.val <= 10^5

  1. -10^9 <= limit <= 10^9

https://leetcode.cn/problems/insufficient-nodes-in-root-to-leaf-paths/description/

思路

当节点为叶子节点时,节点是否删除取决于 limit 减去着一路所经过的节点(不包含当前叶子节点)的和 A ,若是当前叶子节点的值小于 A,则当前叶子节点需要被删除,反之不用;
当节点为非叶子节点时,节点是否删除取决于 它的孩子结点,只要其孩子结点有一个被保留,父亲结点就不能被删;换句话说,父亲结点被删除当且仅当它的两个孩子结点均被删除,即在原二叉树中,该节点属于 不足节点

c++

/*** 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* sufficientSubset(TreeNode* root, int limit) {if(root == nullptr) {return nullptr;}if(root->left == nullptr && root->right == nullptr) {// 当递归到叶子节点后,若是叶子节点的值小于 limit,说明从根节点到该叶子叶子节点中存在不足节点,该叶子节点本身也属于不足节点,需要删除if(root->val < limit) {return nullptr;} else {return root;}}// 当一个结点不是叶子结点的时候,它是否被删除,要看它的孩子结点,只要其孩子结点有一个被保留,父亲结点就不能被删;换句话说,父亲结点被删除当且仅当它的两个孩子结点均被删除,即在原二叉树中,该节点属于 不足节点root->left = sufficientSubset(root->left, limit - root->val);root->right = sufficientSubset(root->right, limit - root->val);// 当 root 节点 的孩子节点都被删除后,说明根节点无法通过 root 节点到达叶子节点,root 节点属于 不足节点,故而删除if(root->left == nullptr && root->right == nullptr) {return nullptr;}// 若是 root 还有孩子节点,则不用删除return root;}};

http://www.ppmy.cn/news/21340.html

相关文章

运动耳机有必要买吗、口碑最好的运动耳机品牌排行

冬天绝对是个减肥的好季节&#xff0c;因为这个季节天气比较冷&#xff0c;我们在运动过程中消耗的热量也就会更多&#xff0c;因此选择一款不错的运动耳机来用坚持就显得尤为重要了。这款运动耳机要能稳定在耳朵上&#xff0c;还要具备防水功能&#xff0c;同时音质上也要有保…

Qt StyleSheet介绍

文章目录前言纠错技巧可以使用 , 号来同时指明多个同一类型控件的样式表qss注释前言 本文主要以这篇博客为基础。添加一些自己使用的心得和使用样式表的一些技巧 纠错 ID选择器这里类型选择器可以省略&#xff0c;因为每个控件的objectName是不一样的&#xff0c;所以无需指定…

(02)Cartographer源码无死角解析-(53) 2D后端优化→位姿图优化理论讲解、

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

算法leetcode|34. 在排序数组中查找元素的第一个和最后一个位置(rust重拳出击)

文章目录34. 在排序数组中查找元素的第一个和最后一个位置&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;rustgoccpythonjava34. 在排序数组中查找元素的第一个和最后一个位置&#xff1a; 给你一个按…

【vue2】vuex基础与五大配置项

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;vuex基础认识、state、getters、mutations actions、modules使用 目录(文末原素材) 一、…

【面试】vue组件style中scoped的作用是什么?什么是scoped穿透?

vue组件style中scoped的作用是什么&#xff1f; 在Vue文件中的style标签上有一个特殊的属性——scoped。scoped属性是 HTML5 中的新属性&#xff0c;是一个布尔属性&#xff0c;如果使用该属性&#xff0c;则css样式仅仅只能应用到当前的Vue组件&#xff0c;避免组件之间样式相…

个人简历(前端)

简历导航个人基本信息为了节约你的时间&#xff0c;请先看这一段我能为公司提供一个什么样的程序员我会的和我不会的个人经历和个人想法工作履历关于我在上一家公司“创业”个人基本信息 标题信息姓名保密性别男学历本科&#xff08;浙工商计算机专业&#xff09;工作经验6年技…

docker run、exec和attach使用和区别

结论 docker run&#xff1a;创建和启动一个新的容器实例&#xff0c;操作对象是镜像&#xff0c;选项较多&#xff0c;如果你要创建和启动一个容器&#xff0c;只能用run&#xff1b;docker exec&#xff1a;在已运行的容器中&#xff0c;执行命令&#xff0c;操作对象是容器&…