​LeetCode解法汇总1080. 根到叶路径上的不足节点

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

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

假如通过节点 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 = [1,2,-3,-5,null,4,null], limit = -1
输出:[1,null,-3,4]

提示:

  • 树中节点数目在范围 [1, 5000] 内
  • -105 <= Node.val <= 105
  • -109 <= limit <= 109

解题思路:

* 解题思路:
* 构建一个递归方法,返回值为是否删除当前节点。
* 方法中,判断如果是叶子节点,则根据(sum + node.val) < limit;判断是否需要删除当前路径的节点,并返回。
* 如果左节点不为空,则进入递归方法,查看左节点是否可以删除。右节点也是一样的逻辑。
* 如果左右节点有一个是不可删除的,则当前节点就是不可删除的。

代码:

public class Solution1080 {

    public TreeNode sufficientSubset(TreeNode root, int limit) {
        return search(root, limit, 0) ? null : root;
    }

    /**
     * @return true代表存在,false代表不存在
     */
    private boolean search(TreeNode node, int limit, int sum) {
        if (node.right == null && node.left == null) {
            return (sum + node.val) < limit;
        }
        boolean isDelete = true;
        if (node.left != null) {
            if (search(node.left, limit, sum + node.val)) {
                node.left = null;
            } else {
                isDelete = false;
            }
        }
        if (node.right != null) {
            if (search(node.right, limit, sum + node.val)) {
                node.right = null;
            } else {
                isDelete = false;
            }
        }
        return isDelete;
    }

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失落夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值