LeetCode 1080. 根到叶路径上的不足节点

题目描述

1080. 根到叶路径上的不足节点

思路分析

解法一:DFS 剪枝(推荐)

核心思路

  • 递归向下传递剩余限制 limit - node.val
  • 若子树返回空,则当前节点对应子树被剪掉。
  • 当节点成为叶子且路径和不足时删除该节点。


复杂度分析

  • 时间复杂度:O(n),其中 n 为节点数。
  • 空间复杂度:O(h),其中 h 为树高。
class Solution {
    public TreeNode sufficientSubset(TreeNode root, int limit) {
        return dfs(root, limit);
    }

    private TreeNode dfs(TreeNode node, int limit) {
        if (node == null) {
            return null;
        }
        if (node.left == null && node.right == null) {
            return node.val < limit ? null : node;
        }

        node.left = dfs(node.left, limit - node.val);
        node.right = dfs(node.right, limit - node.val);

        if (node.left == null && node.right == null) {
            return null;
        }
        return node;
    }
}
func sufficientSubset(root *TreeNode, limit int) *TreeNode {
    return dfsSufficient(root, limit)
}

func dfsSufficient(node *TreeNode, limit int) *TreeNode {
    if node == nil {
        return nil
    }
    if node.Left == nil && node.Right == nil {
        if node.Val < limit {
            return nil
        }
        return node
    }

    node.Left = dfsSufficient(node.Left, limit-node.Val)
    node.Right = dfsSufficient(node.Right, limit-node.Val)

    if node.Left == nil && node.Right == nil {
        return nil
    }
    return node
}

相似题目

题目 难度 考察点
112. 路径总和 简单 DFS
113. 路径总和 II 中等 DFS
124. 二叉树中的最大路径和 困难 DFS
437. 路径总和 III 中等 前缀和
1080. 根到叶路径上的不足节点 中等 DFS
本文作者:
本文链接: https://hgnulb.github.io/blog/2022/67518301
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!