LeetCode刷题笔记 1110. 删点成林

题目描述

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

如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。

返回森林中的每棵树。你可以按任意顺序组织答案。

示例:
LeetCode刷题笔记 1110. 删点成林_第1张图片
输入:root = [1,2,3,4,5,6,7], to_delete = [3,5]
输出:[[1,2,null,4],[6],[7]]

Sample Code

class Solution {
    List<TreeNode> res = new ArrayList<>();
    Set<Integer> set = new HashSet<>();
    public List<TreeNode> delNodes(TreeNode root, int[] to_delete) {
        for(int t : to_delete)
            set.add(t);
        TreeNode node = helper(root);
        if(node != null) res.add(node);
        return res;
    }
    
    private TreeNode helper(TreeNode node) {
        if(node == null) return null;
        
        if(node.left==null && node.right==null)
            return set.contains(node.val) ? null : node;
        else {
            TreeNode le = helper(node.left);
            TreeNode ri = helper(node.right);
            
            if(set.contains(node.val)) {
                if(le != null) res.add(le);
                if(ri != null) res.add(ri);
                return null;
            }
            node.left = le;
            node.right= ri;
            return node;
        }
    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/delete-nodes-and-return-forest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(LeetCode笔记,#,递归,#,二叉树)