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.
Input: root = [1,2,3,4,5,6,7], to_delete = [3,5]
Output: [[1,2,null,4],[6],[7]]
Input: root = [1,2,4,null,3], to_delete = [3]
Output: [[1,2,4]]
1000.1 and 1000.to_delete.length <= 1000to_delete contains distinct values between 1 and 1000.The problem requires us to return a forest of trees by deleting certain nodes from a binary tree. We can tackle this problem using a recursive approach. The primary idea is to traverse the tree using DFS (Depth First Search) and make decisions at each node whether it is to be deleted or retained.
This approach enhances the first solution by using a HashSet to store nodes that need to be deleted, making the check for deletions (O(1)) on average. This makes it slightly more optimal for larger sets of nodes to be deleted.
Same steps as above, but the check for deletion is turned into an (O(1)) operation by using a Set data structure.