Untitled
public class DeleteNodesAndReturnForest { public List<TreeNode> delNodes(TreeNode root, int[] to_delete) { List<TreeNode> forest = new ArrayList<>(); Set<Integer> toDeleteSet = new HashSet<>(); for (int val : to_delete) { toDeleteSet.add(val); } helper(root, toDeleteSet, forest); // If root is not deleted, add it to the forest if (!toDeleteSet.contains(root.val)) { forest.add(root); } return forest; } private TreeNode helper(TreeNode node, Set<Integer> toDeleteSet, List<TreeNode> forest) { if (node == null) { return null; } // Recur on left and right children node.left = helper(node.left, toDeleteSet, forest); node.right = helper(node.right, toDeleteSet, forest); // If this node needs to be deleted if (toDeleteSet.contains(node.val)) { if (node.left != null) { forest.add(node.left); } if (node.right != null) { forest.add(node.right); } return null; // This node is deleted } return node; // Return the node as part of the tree }
Leave a Comment