首页 > 其他分享 >力扣刷题记录: 1080. 根到叶路径上的不足节点

力扣刷题记录: 1080. 根到叶路径上的不足节点

时间:2024-06-06 20:02:03浏览次数:20  
标签:return val 1080 value 力扣 根到 now root 节点

        本题是第 140 场周赛的 Q3,LC竞赛分为 1806。主要考察递归。我觉得这道题不值这个分。

方法一. 递归

        我们将通过一个节点的“根-叶”路径分解为两部分,一部分为根到其父节点,另一部分为它到叶子节点。前一部分的 val 值之和是固定的,可以在递归中使用一个变量 pre 来记录。后一部分,只需要看从它到叶子节点的路径上值之和最大的那条路径即可(参考value()函数),如果最大的路径都无法大于 limit,其他路径肯定也不行,那就删除节点。删除节点通过修改 parent 之中相应指针的指向即可。

        注意需要对 root 进行特殊判定。

        代码如下:

class Solution {
public:
    TreeNode* sufficientSubset(TreeNode* root, int limit) {

        if(value(root)<limit) return nullptr;
        
        delete_node(root->val,root->left,root,limit);
        delete_node(root->val,root->right,root,limit);
        return root;
    }

    void delete_node(int pre,TreeNode* now,TreeNode* parent,int limit){
        if(now==NULL) return;
        
        if(parent->left==now && pre+value(now)<limit){
            parent->left = NULL;
            return;    
        }

        if(parent->right==now && pre+value(now)<limit){
            parent->right = NULL;
            return;
        }

        delete_node(pre+now->val,now->left,now,limit);
        delete_node(pre+now->val,now->right,now,limit);
        
    }

    int value(TreeNode* root){
        if(root==NULL) return 0;

        if(!root->left&&!root->right) return root->val;
        if(!root->left) return root->val+value(root->right);
        if(!root->right) return root->val+value(root->left); 

        int a = value(root->left);
        int b = value(root->right);
        return root->val+max(a,b);
    }
};

        这道题如果改成把不足节点删掉之后,自动让其左子节点/右子节点替代其位置,而不是子节点随着不足节点一起删除,可能还要麻烦一些。

标签:return,val,1080,value,力扣,根到,now,root,节点
From: https://blog.csdn.net/Bright_Brilliant/article/details/139508712

相关文章

  • 力扣:1103. 分糖果 II
    1103.分糖果II排排坐,分糖果。我们买了一些糖果 candies,打算把它们分给排好队的 n=num_people 个小朋友。给第一个小朋友1颗糖果,第二个小朋友2颗,依此类推,直到给最后一个小朋友 n 颗糖果。然后,我们再回到队伍的起点,给第一个小朋友 n +1 颗糖果,第二个小朋友......
  • 力扣每日一题 6/6
    2938.区分黑球与白球[中等]题目:桌子上有 n 个球,每个球的颜色不是黑色,就是白色。给你一个长度为 n 、下标从 0 开始的二进制字符串 s,其中 1 和 0 分别代表黑色和白色的球。在每一步中,你可以选择两个相邻的球并交换它们。返回「将所有黑色球都移到右侧,所有白色球......
  • 加菲猫家族迅雷BT完整下载[2.68GB-AVI]高清中英文双字版[1080p国语]
    《加菲猫家族》是一部根据美国漫画家吉姆·戴维斯的漫画《加菲猫》改编而成的动画喜剧电影。该片于2016年上映,由菲尔·锡密克执导,帕姆·比尔斯、詹妮弗·加纳、马克·沃尔伯格等知名演员配音。 影片讲述了一只肥胖懒惰却极其聪明的橘猫加菲和他的主人乔恩以及他们的新......
  • 滑动窗口最大值-力扣
    在做这道题时,首先想到的解法是使用队列来做,维护一个队列,每次保存滑动窗口大小的长度,并判断此时队列中的最大值,但这样做,在k的值较大时,出现了超时问题,代码如下:classSolution{public:vector<int>maxSlidingWindow(vector<int>&nums,intk){vector<int>r......
  • 二叉树的中序遍历-力扣
    二叉树的中序遍历,指首先遍历左节点,然后遍历中间节点,最后遍历右节点,按照这个顺序进行递归即可。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullp......
  • 二叉树的层序遍历-力扣
    本题是二叉树的层序遍历,通过一个队列来控制遍历的节点,二叉树每层的节点和上一层入队的节点个数是相同的,根据这一点编写循环条件。/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*......
  • 前K个高频元素-力扣
    本题想到的解法是使用哈希表首先统计数组中每个元素出现的次数,然后对出现次数进行排序,最后进行输出。看了题解学习到使用优先级队列小顶堆来完成,小顶堆的排序规则由自己来定义。代码如下:classSolution{public:classMyComparison{public:booloper......
  • 力扣刷题--2553. 分割数组中数字的数位【简单】
    题目描述给你一个正整数数组nums,请你返回一个数组answer,你需要将nums中每个整数进行数位分割后,按照nums中出现的相同顺序放入答案数组中。对一个整数进行数位分割,指的是将整数各个数位按原本出现的顺序排列成数组。比方说,整数10921,分割它的各个数位得到[1,0......
  • 力扣 41.缺少的第一个正整数
    题目描述:给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例1:输入:nums=[1,2,0]输出:3解释:范围[1,2]中的数字都在数组中。示例2:输入:nums=[3,4,-1,1]输出:2解释:1......
  • 力扣-1049. 最后一块石头的重量 II
    1.题目题目地址(1049.最后一块石头的重量II-力扣(LeetCode))https://leetcode.cn/problems/last-stone-weight-ii/题目描述有一堆石头,用整数数组 stones表示。其中 stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分......