关于leetcode:leetcode-1110-Delete-Nodes-And-Return-Forest-删点成林中等

37次阅读

共计 1564 个字符,预计需要花费 4 分钟才能阅读完成。

一、题目粗心

给出二叉树的根节点 root,树上每个节点都有一个不同的值。

如果节点值在 to_delete 中呈现,咱们就把该节点从树上删去,最初失去一个森林(一些不相交的树形成的汇合)。

返回森林中的每棵树。你能够按任意程序组织答案。

示例 1:

输出:root = [1,2,3,4,5,6,7], to_delete = [3,5]
输入:[[1,2,null,4],[6],[7]]

示例 2:

输出:root = [1,2,4,null,3], to_delete = [3]
输入:[[1,2,4]]

提醒:

  • 树中的节点数最大为 1000。
  • 每个节点都有一个介于 1 到 1000 之间的值,且各不相同。
  • to_delete.length <= 1000
  • to_delete 蕴含一些从 1 到 1000、各不相同的值。

起源:力扣(LeetCode)
链接:https://leetcode.cn/problems/…
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

二、解题思路

给一棵二叉树,每个节点值均不同,删除一些节点,因为删除非叶子节点会使原来的二叉树断开,从而会造成从棵二叉树,造成一片森林,返回森林中所有二叉树的根节点。

二叉树的题首先想到用递归,递归办法传递 4 个参数,以后节点;是否是根节点(如果是根节点、且存在左右子树才会造成新树);再传递一个 hashset 用来存储要删除的节点,达到常数据级搜寻;还有一个保留后果的 list。

在递归函数中,如果节点为空返回 null,定义亦是 deleted 来保留以后节点值是否在 hashset 中,若是根节点且不须要被删除,则将节点退出返回后果 list 中。而后将左子节点赋值为对左子节点调用递归函数的返回值,右子节点赋值为对右子节点调用递归函数的返回值。最初判断以后节点是否被删除了,如果是的话返回空,否则返回以后指针。这样的话每棵树的根节点都在递归过程中存入后果 list 中了。

三、解题办法

3.1 Java 实现

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) {this.val = val;}
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {List<TreeNode> ans = new ArrayList<>();
        Set<Integer> set = new HashSet<>();
        for (int tmp : to_delete) {set.add(tmp);
        }
        helper(root, true, set, ans);
        return ans;
    }

    TreeNode helper(TreeNode node, boolean isRoot, Set<Integer> set, List<TreeNode> ans) {if (node == null) {return null;}
        boolean deleted = set.contains(node.val);
        if (isRoot && !deleted) {ans.add(node);
        }
        node.left = helper(node.left, deleted, set, ans);
        node.right = helper(node.right, deleted, set, ans);
        return deleted ? null : node;
    }
}

四、总结小记

  • 2022/9/14 工作接踵而至

正文完
 0