Given the root
of a binary tree, each node in the tree has a distinct value.
After deleting all nodes with a value in to_delete
, we are left with a forest (a disjoint union of trees).
Return the roots of the trees in the remaining forest. You may return the result in any order.
Example 1:
Input: root = [1,2,3,4,5,6,7], to_delete = [3,5] Output: [[1,2,null,4],[6],[7]]
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<TreeNode> delNodes(TreeNode root, int[] to_delete) { List<TreeNode> res = new ArrayList<>(); Set<Integer> set = new HashSet<>(); for(int num : to_delete) { set.add(num); } if (!set.contains(root.val)) { res.add(root); } helper(root, res, set); return res; } private TreeNode helper(TreeNode root, List<TreeNode> res, Set<Integer> set) { if (root == null) { return null; } root.left = helper(root.left, res, set); root.right = helper(root.right, res, set); if (set.contains(root.val)) { if (root.left != null) { res.add(root.left); } if (root.right != null) { res.add(root.right); } return null; } return root; } }