LeetCode 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 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!