每日一题 1110删点成林

题目

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

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

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

示例 1:

每日一题 1110删点成林_第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]]

题解

/**
 * 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 {
    List ans = new ArrayList<>();//List用于接收答案
    Set s = new HashSet<>();//Set用于存储删除元素
    public List delNodes(TreeNode root, int[] to_delete) {
        for (int x : to_delete) {
            s.add(x);
        }
        if (dfs(root) != null) {
            ans.add(root);
        }
        return ans;
    }
    private TreeNode dfs(TreeNode root) {
        if (root == null) {
            return null;
        }
        root.left = dfs(root.left);
        root.right = dfs(root.right);
        //判断根节点有没有删除
        if (!s.contains(root.val)) {
            return root;
        }
        //判断左节点
        if (root.left != null) {
            ans.add(root.left);
        }
        //判断右节点
        if (root.right != null) {
            ans.add(root.right);
        }
        return null;
    }
}

你可能感兴趣的:(数据结构,算法,leetcode)